IOC - bean 生命周期

生命周期

  1. 实例化:通过反射调用构造方法创建 Bean 实例
  2. 属性赋值:把配置文件的值或 IOC 容器中的其他 bean 注入属性中
  3. 初始化:bean 进入初始化阶段,spring 提供了 3 种方式对 bean 加工处理
    • @PostConstruct 注解指定初始化方法
    • 实现 InitializingBean 接口,复写 afterPropertiesSet 方法
    • @Bean 注册 bean 可以通过 initMethod 属性指定初始化方法
  4. 使用:到此 bean 完整了,程序可使用
  5. 销毁:程序关闭,释放资源,销毁 bean
    • @PreDestroy 注解指定销毁方法
    • 实现 DisposableBean 接口,复写 destroy 方法
    • @Bean 注册 bean 可以通过 destroyMethod 属性指定销毁方法

完整流程

  • BeanPostProcessor 不能感知当前类
  • BeanPostProcessor 会拦截所有 bean
  • @Autowired 就是 BeanPostProcessor 实现的
@Component
public class User implements BeanPostProcessor {

    // 其他 bean 会进这个方法,User 的 bean 不会走!!!
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("Processing bean: " + beanName + " of type: " + bean.getClass().getName());
        if (bean instanceof Dog) {
            System.out.println("************************");
        }
        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
    }
}
start
反射创建对象
属性赋值
Aware 感知接口回调
BeanPostProcessor 接口 postProcessBeforeInitialization 方法
@PostConstruct 标注的方法
InitializingBean 接口 afterPropertiesSet 方法
@Bean initMethod 指定的方法
BeanPostProcessor 接口 postProcessAfterInitialization 方法
使用阶段
@PreDestroy 标注的方法
DisposableBean 接口 destroy方法
@Bean destroyMethod 指定的方法
end
posted @   CyrusHuang  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示