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

原文作者:深山猿

产生生命周期的各阶段的特征主要有哪些(及在生命周期中的作用)(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的使用做出如下说明:

  • beanPostPocesser被实现并注释解后,所有的bean在初始化时都会被执行所有beanPostPocessor实现类的postProcessBeforeInitialization和postProcessAfterInitialization方法,注意两个所有;
  • 多个类实现了beanPostPocessor,如果存在返回为空,则仅有一个类的postProcessBeforeInitialization方法执行了;
  • 如果仅需要对某特定类处理可以在postProcessInitialization和postProcessAfterInitialization方法内部使用方法的实例,请针对某个特定类的处理;
  • 在实现的方法内修改返回的实例,即按照您的要求返回需要的代理类或别的类,这个会在下面继续说明用法;

下面看下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,即可免费获取。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页