IOC初始化bean的流程

Bean的声明周期
1)容器启动时创建Bean

2)给Bean通过DI设置对象属性

3)如果Bean实现了BeanNameAware接口,则会调用BeanNameAware接口中的SetBeanName();

4)如果 bean实现了BeanFactoryAware 接口,工厂通过传递自身的实例来调用setBeanFactory()。

5)如果存在与 bean 关联的任何BeanPostProcessors(前置处理器),则调用preProcessBeforeInitialization() 方法。

6)如果Bean重写了initMethod()则会调用该方法。

<!--initMethod()和destoryMethod()方法必须没有参数,但是可以引发任何异常。-->
    <bean id="person" class="com.wu.pojo.Person" 
    init-method="Myinit"  destroy-method="MyDestory">
    
    //对应Bean里面的方法
    public void Myinit(){
        System.out.println("容器关闭");
    }
    public void MyDestory(){
        System.out.println("容器销毁");
    }

7)如果存在与 bean 关联的任何BeanPostProcessors(前置处理器),则调用postProcessAfterInitialization() 方法。

<bean id="person" class="com.wu.pojo.Person" init-method="Myinit" destroy-method="MyDestory">
</bean>
 <!--beanPostProcessors为ioc容器中所有的bean共享-->
<bean id="beanPostProcessors" class="com.wu.pojo.MyBeanPostProcessors">
</bean>

前置处理器

8)如果 bean 实现DisposableBean 接口,当 spring 容器关闭时,会调用destory(),这一步在Bean是多例的时候不会执行。

9)关闭IOC容器,销毁Bean 如果Bean指定了destoryMehtod,则会调用它。

注:关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种:
第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
第二种是:通过 在xml中定义init-method 和 destory-method方法
第三种是: 通过bean实现InitializingBean和 DisposableBean接口

Spring项目启动时 加载顺序 (这是我一直很好奇的 看看就行了)
Spring 源码分析: @PostConstruct、InitializingBean、ApplicationContextAware、ApplicationListener 的执行顺序
Spring 版本: 5.2.2.RELEASE

先上结论,顺序是:
1. 构造函数
2. 依赖的bean被初始化完成,并注入到了当前bean 中 (循环依赖时,稍微不同)
3. ApplicationContextAware 接口的 setApplicationContext 方法
4. @PostConstruct 注解的方法(ApplicationRunner)
5. InitializingBean 接口的 afterPropertiesSet 方法
6. 等所有 bean 初始化完成后,ApplicationListener 接口的 onApplicationEvent 方法接收 ContextRefreshedEvent 事件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值