spring加载顺序

这篇博客详细阐述了Spring中类的加载顺序,以一个具体的例子展示了类A的初始化过程:构造函数 -> B的set方法 -> afterPropertiesSet() -> init()方法。同时,博主介绍了Spring的通用规则,包括Bean的实例化、属性设置、接口回调等步骤,并提及了多个Bean加载时的顺序规则以及涉及到的BeanPostProcessor、BeanFactoryAware等接口的调用时机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类A托管给spring,类A里有一属性B,且有B的Set方法,且类A实现了InitializingBean,及init()方法,则类A的初始化顺序为:

先A的构造函数----->B的set方法------>afterPropertiesSet方法里执行的内容------>init()方法


spring的通用规则:

一,单一Bean加载时

  • 优先加载BeanPostProcessor的实现Bean
  • 实例化; 
  • 设置属性值
  • 如果实现了BeanNameAware接口,调用setBeanName设置Bean的ID或者Name
  • 如果实现BeanFactoryAware接口,调用setBeanFactory 设置BeanFactory
  • 如果实现ApplicationContextAware,调用setApplicationContext设置ApplicationContext
  • 调用BeanPostProcessor的预先初始化方法
  • 调用InitializingBean的afterPropertiesSet()方法
  • 调用定制init-method方法
  • 调用BeanPostProcessor的后初始化方法

 二,多个Bean的先后顺序

  • 优先加载BeanPostProcessor的实现Bean
  • 按Bean文件和Bean的定义顺序按bean的装载顺序(即使加载多个spring文件时存在id覆盖)
  • “设置属性值”(第2步)时,遇到ref,则在“实例化”(第1步)之后先加载ref的id对应的bean
  • AbstractFactoryBean的子类,在第6步之后,会调用createInstance方法,之后会调用getObjectType方法
  • BeanFactoryUtils类也会改变Bean的加载顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值