Spring Bean的生命周期

本文详细介绍了Spring框架中Bean的创建过程,包括Bean的实例化、依赖注入、Aware接口注入、初始化回调方法、BeanPostProcessor前后置处理等关键步骤。同时探讨了Bean的销毁流程。

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

参考了:https://www.zhihu.com/question/38597960

BeanFactory:延迟加载Bean
ApplicationContext:实现了BeanFactory接口,并在初始化的时候就加载Bean

1. NEW (只是简单实例化,没有注入依赖)

BeanFactory:当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。
ApplicationContext:当容器启动结束后,就实例化所有的bean。

实例化对象被包装在BeanWrapper对象中,BeanWrapper提供了设置对象属性的接口,从而避免了使用反射机制设置属性。

2. 依赖注入

所有的类都实例化了,该把依赖注入进去了。
通过BeanWrapper提供的设置属性的接口完成依赖注入。

3. 注入Aware接口

  1. 如果这个Bean实现BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法
  2. 如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(),传递的是Spring工厂本身(可以用这个方法获取到其他Bean)
  3. 如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文,该方式同样可以实现步骤4,但比4更好,以为ApplicationContext是BeanFactory的子接口,有更多的实现方法。但是要注意,如果是延迟加载的Bean,这里不会调用,因为不是从ApplicationContext加载的Bean

4. BeanPostProcessor.postProcessBeforeInitialization

如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法

5. InitializingBean.afterPropertiesSet

如果实现了InitializingBean接口,则会调用afterPropertiesSet()方法

5. init-method

如果这个Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法

6.BeanPostProcessor.postProcessAfterInitialization

如果这个Bean关联了BeanPostProcessor接口,将会调用postAfterInitialization(Object obj, String s)方法


到这里就可以使用Bean了,然后是销毁


7. DisposableBean

当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法

8. destroy-method

最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值