Spring Bean生命周期详解

Spring框架中Bean的生命周期是一个复杂但有序的过程,涵盖了从创建到销毁的各个阶段。以下是Bean生命周期的详细步骤:

1. 实例化(Instantiation)

  • 通过构造方法或工厂方法创建Bean的实例。
  • 此时对象处于“原始”状态,尚未设置任何属性。

2. 属性赋值/依赖注入(Populate Properties)

  • Spring容器注入Bean的依赖项(通过Setter方法、字段注入或构造器注入)。
  • 例如:通过@Autowired@Resource或XML中的<property>标签完成依赖注入。

3. Aware接口回调

  • 若Bean实现了特定的Aware接口,Spring会调用对应方法,传递相关依赖:
    • BeanNameAwaresetBeanName(String name)(设置Bean的名称)。
    • BeanFactoryAwaresetBeanFactory(BeanFactory factory)(设置BeanFactory引用)。
    • ApplicationContextAwaresetApplicationContext(ApplicationContext context)(设置ApplicationContext引用,需注意可能触发其他初始化操作)。

4. BeanPostProcessor的前置处理(postProcessBeforeInitialization)

  • 所有注册的BeanPostProcessorpostProcessBeforeInitialization()方法被调用。
  • 可用于修改Bean实例(如生成代理对象、修改属性值)。

5. 初始化方法(Initialization)

  • @PostConstruct注解的方法:优先执行。
  • InitializingBean接口的afterPropertiesSet()方法:随后执行。
  • 自定义初始化方法:通过XML的init-method属性或@Bean(initMethod = "...")指定的方法最后执行。

6. BeanPostProcessor的后置处理(postProcessAfterInitialization)

  • 所有注册的BeanPostProcessorpostProcessAfterInitialization()方法被调用。
  • 通常用于AOP动态代理的生成或最终增强处理。

7. Bean就绪(Ready for Use)

  • 此时Bean已完全初始化,可被应用程序使用(如通过getBean()获取)。

8. 销毁阶段(Destruction)

  • @PreDestroy注解的方法:容器关闭时首先执行。
  • DisposableBean接口的destroy()方法:随后执行。
  • 自定义销毁方法:通过XML的destroy-method属性或@Bean(destroyMethod = "...")指定的方法最后执行。

其他关键点

  • BeanPostProcessor的作用:贯穿整个生命周期,允许在初始化前后插入自定义逻辑。
  • 循环依赖处理:Spring通过三级缓存(未完成实例化、已实例化未注入、完整Bean)解决单例Bean的循环依赖。
  • 作用域影响:原型(Prototype)作用域的Bean不会触发销毁方法,仅单例(Singleton)Bean会完整执行生命周期。
  • 扩展接口:如InstantiationAwareBeanPostProcessor允许在实例化前后干预,属于更高级定制。

流程图概览

实例化 → 属性注入 → Aware接口回调 → BeanPostProcessor前置处理 → 初始化方法 → BeanPostProcessor后置处理 → 使用 → 销毁

理解Bean生命周期有助于在开发中合理利用回调方法和扩展点,优化资源管理和增强Bean功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值