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

Bean的创建过程源码

1. 构造方法创建对象 利用该类的构造方法来实例化得到一个对象(但是如何一个类中有多个构造方法,Spring则会进行选择,这个叫做推断构造方法)

2.依赖注入 得到一个对象后,Spring会判断该对象中是否存在被@Autowired注解了的属性,把这些属性找出来并由Spring进行赋值(依赖注入)

3.回调 依赖注入后,Spring会判断该对象是否实现了BeanNameAware接口、BeanClassLoaderAware接口、BeanFactoryAware接口,如果实现了,就表示当前对象必须实现该接口中所定义的setBeanName()、setBeanClassLoader()、setBeanFactory()方法,那Spring就会调用这些方法并传入相应的参数(Aware回调)

4.@PostConstruct Aware回调后,Spring会判断该对象中是否存在某个方法被@PostConstruct注解了,如果存在,Spring会调用当前对象的此方法(初始化前)

5.InitializingBean 紧接着,Spring会判断该对象是否实现了InitializingBean接口,如果实现了,就表示当前对象必须实现该接口中的afterPropertiesSet()方法,那Spring就会调用当前对象中的afterPropertiesSet()方法(初始化)

6.AOP 最后,Spring会判断当前对象需不需要进行AOP,如果不需要那么Bean就创建完了,如果需要进行AOP,则会进行动态代理并生成一个代理对象做为Bean(初始化后)

创建完成后,Bean对象会存储在一个Map集合里

private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);

Spring事务

当我们在某个方法上加了@Transactional注解后,就表示该方法在调用时会开启Spring事务,而这个方法所在的类所对应的Bean对象会是该类的代理对象。

Spring事务的代理对象执行某个方法时的步骤:

  1. 判断当前执行的方法是否存在@Transactional注解
  2. 如果存在,则利用事务管理器(TransactionMananger)新建一个数据库连接
  3. 修改数据库连接的autocommit为false
  4. 执行target.test(),执行程序员所写的业务逻辑代码,也就是执行sql
  5. 执行完了之后如果没有出现异常,则提交,否则回滚

http://www.kler.cn/a/146246.html

相关文章:

  • Android 项目依赖冲突问题:Duplicate class found in modules
  • HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (三、影视搜索页功能实现)
  • SpringBoot:RestTemplate与IllegalArgumentException
  • Axios封装一款前端项目网络请求实用插件
  • AAPM:基于大型语言模型代理的资产定价模型,夏普比率提高9.6%
  • 闪豆多平台视频批量下载器
  • 2824. 统计和小于目标的下标对数目 : 详解 “左找右“ “右找左“ 两种方式
  • 快速上手Banana Pi BPI-R4 MediaTek MT7988A 开源路由器开发板
  • C语言基础篇5:指针(一)
  • STM32使用多路PWM注意事项
  • 一个tomcat中部署的多个war,相当于几个jvm
  • AttributeError: ‘_OpNamespace‘ ‘image‘ object has no attribute ‘read_file‘解决
  • 免费部署开源大模型
  • 人脑工作机制 基本工作原理 神经元 神经网络 学习和记忆 和身体的互动 模仿游戏
  • 2023.11.25电商项目平台建设2 -四大业务之核销主题建模
  • 计算机毕业设计 基于SpringBoot的智能停车场计费系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 3.OpenResty系列之Nginx反向代理
  • 推荐你一个基于Koin, Ktor Paging等组件的KMM Compose Multiplatform项目
  • 内衣洗衣机怎么选?内衣洗衣机便宜好用的牌子推荐
  • SOLIDWORKS髙级孔命令及相关问题
  • 某生物科技巨头:引入安全工具,推动基因科技领域智能化发展
  • C 文件 rewind() 函数
  • JVM字节码文件的相关概述解读
  • leetcode周赛373场
  • Linux C语言 30-套接字操作
  • TCP/IP、Http、Socket之间的区别