原文作者:深山猿

产生生命周期的各阶段的特征主要有哪些(及在生命周期中的作用)(1)

最近在看春天的源码,所以总结下spring的生命周期和各个阶段的作用。spring 的生命周期概括起来主要如下:

  1. 实例化
  2. 属性注入ioc注入;
  3. 实现了BeanNameAware则执行setBeanName方法;
  4. 实现了BeanfactoryAware则执行setBeanFactory方法;
  5. 实现了applicationContextAware执行setApplicationContest方法;
  6. BeanPostProcessor执行postProcessBeforeInitiliaztion;
  7. 实现了InitiliazingBean执行属性设置方法;
  8. 配置文件定义了init-method则执行对应初始化方法;
  9. BeanPostProcessor执行postProcessorfterInitilization;
  10. Bean可以使用;
  11. 关闭容器
  12. DisposableBean执行销毁方法;
  13. 配置文件定义了destory-method则执行destory-method;

下面进行简单的分析。1-2步进行实例化和各种属性的填充,你所用的自动装配等注解也会在这个时候生效3-5步是执行***感知接口中的方法,本质上就是把spring中的组件(如ApplicationContext,beanFactory等)通过接口的方式传给实体类,关于**** Aware的接口的使用和作用以BeanFactoryAware为例:

你的类实现了BeanFactoryAware接口,就要实现setBeanFactory方法,该方法的本质就是在实例化bean的时候,会通过setBeanFactory将beanFactory提供给你,然后你就可以使用beanFactory了。如果想了解beanFactory和ApplicationContext的。区别和关系参考这里6和9步是BeanPostProcessor的应用的先对的BeanPostProcessor的使用做出如下说明:

下面看下BeanPostProcessor的实际使用:第一个BeanPostProcessor的实现类PostProcessor。

第二个BeanPostprocessor的实现类PostProcessorImpl。

第三个类,实现了InitializingBean接口。

执行代码:

结果如下:

源码中对postProcessBeforeInstantiation的解释是给BeanPostProcessor的一个返回代理而不是目标的bean实例的机会。实际我在实例1中返回factory.getBean( “后处理器”);这段代码生效了,ac.getBean( “postProcessorInclude”) ,不再是返回PostProcessorImpl的实体类,而是后处理器的实体类。源码如下:

第7步:实现了InitiliazingBean则在afterPropertiesSet方法之后执行,需要说明的是:上面的代码第三个类PostProcessorInclude的afterPropertiesSet方法就不会执行。因为在postProcessBeforeInitialization方法中被替换,不再继续进行执行,如果将返回return factory.getBean(“ postProcessor”);注释掉,你会发现afterPropertiesSet方法会正常执行。至于别的7 8 10 11 12 13就不再解释了,比较简单。


最后,我是一名从事了多年开发的JAVA老程序员,今年年初我花了一个月整理了一份最适合2019年学习的java学习干货,可以送给每一位喜欢java的小伙伴,想要获取的可以关注我的头条号并在后台私信我:01,即可免费获取。

,