当前位置: 首页 > news >正文

Spring框架基础知识

Spring框架基础知识笔记

Spring中bean的生命周期,指Bean从创建、初始化、使用到销毁的整个过程。
Bean实例化->依赖注入->Aware接口的回调->BeanPostProcessor前置处理->初始化方法->BeanPostProcessor后置处理->Bean使用->Bean销毁

循环引用(Circular Dependency)是指两个或多个Bean互相依赖,导致无法完成依赖注入的情况。BeanA的构造器依赖BeanB,而BeanB的构造器依赖BeanA;或者是BeanA有一个属性依赖于BeanB,而BeanB也有一个属性依赖于BeanA。这种循环依赖通过Spring的一级、二级、三级缓存机制是可以解决的。

@Component
public class BeanA {@Autowiredprivate BeanB beanB;public BeanA() {}public void setBeanB(BeanB beanB) {this.beanB = beanB;}
}@Component
public class BeanB {@Autowiredprivate BeanA beanA;public BeanB() {}public void setBeanA(BeanA beanA) {this.beanA = beanA;}
}
@Component
public class BeanA {@Autowired@Lazyprivate BeanB beanB;
}

在spring框架中,使用注解singleton,一般是Scope注解代表bean可以在IOC容器中作为单例,使用prototype则一个bean可以定义多个实例。
而bean并不属于线程安全的范畴。有状态的都不安全(可修改)。

AOP是面向切面编程,也就是可以重用的模块,多次重复使用的方法进行封装,降低耦合问题。@Around("pointcut()")。(如日志记录)。

事务@Transaction)是为了确保一组操作在数据库中是原子性的(是一个不可分割的整体,所有操作要么都执行,要么都不执行),要么所有操作成功并提交,要么任何一个操作失败时,全部回滚,保持数据一致性。分为声明式事务管理编程式事务管理。事务失效的情况,一般就是抛出异常出问题。

@Service
public class MyService {@Transactionalpublic void someTransactionalMethod() {// 数据库操作}
}
// propagation 传播行为(REQUIRED当前方法必须在事务中运行),isolation 事务之间的隔离程度,timeout 事务执行最长时间,readOnly 只读
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, timeout = 30, readOnly = false)
public void updateData() {// 更新数据库的操作
}

MVC框架Model处理数据和业务逻辑,View负责展示数据和用户界面,Controller协调模型和视图,处理请求和返回响应。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JAVA学习笔记02-integer
  • 【C++】多态的认识和理解
  • 大数据-133 - ClickHouse 基础概述 全面了解
  • 【Spring】面试题:Spring,Spring Boot, Spring MVC 的关系以及区别(5)
  • flutter集成百度地图定位 ‘BMKLocationManager.h‘ file not found报错
  • 《Learning to Prompt for Vision-Language Models》CoOp论文中文校对版
  • C++_类和对象(下篇)—— 内部类、匿名对象、对象拷贝时的编译器优化
  • Linux进阶 修改文件所在组
  • 【C++二叉树】JZ36 二叉搜索树与双向链表
  • 屏幕录制电脑,推荐使用这些录制方式
  • 【Python报错已解决】 Requests.exceptions.ProxyError: HTTPSConnectionPool
  • Python 实现Excel XLS和XLSX格式相互转换
  • 需要申请 TAC
  • 接口自动化测试框架实战(Pytest+Allure+Excel)
  • Renesas R7FA8D1BH (Cortex®-M85)内部RTC的应用
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Android优雅地处理按钮重复点击
  • angular学习第一篇-----环境搭建
  • crontab执行失败的多种原因
  • exif信息对照
  • Javascript弹出层-初探
  • leetcode386. Lexicographical Numbers
  • springMvc学习笔记(2)
  • vuex 笔记整理
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 关于Flux,Vuex,Redux的思考
  • 利用jquery编写加法运算验证码
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 我的业余项目总结
  • 小程序 setData 学问多
  • 云大使推广中的常见热门问题
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ​ubuntu下安装kvm虚拟机
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #Linux(Source Insight安装及工程建立)
  • (13)Hive调优——动态分区导致的小文件问题
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (LLM) 很笨
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 提取注释生成API文档 帮助文档
  • .net6Api后台+uniapp导出Excel
  • .NET周刊【7月第4期 2024-07-28】
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d