5.Spring Bean生命周期.md

5.Spring Bean生命周期

生命周期流程图

bean生命周期

说明

  1. *调用InstantitationAwareBeanPostProcessor的postProcessBeforeInstantitation()方法
  2. 实例化:Class clazz, custructor或者 newInstance
  3. *调用用InstantitaonAwareBeanPostProcessor的postProcessAfterInstantitation()方法
  4. *调用InstantitaionAwareBeanPostProcessor的postProcesPropertyValues()方法
  5. 设置属性: 如果在配置中赋值了,则调用setXxx
  6. 调用BeanAware的setBeanName(String name), 把当前bean name 注入进来
  7. 调用BeanFactoryAware的setBeanFacotry(BeanFactory factory),吧factory注入进来
    . 调用ApplicationContextAware的setApplicationContent() ,把ApplicationContext注入进来
  8. *调用BeanPostProcessor的postporcessBeforeInitialization(Object o, String s)把 bean传进来,供组件处理bean的属性等, s为bean的name,o为bean的实例
  9. 调用InitializatingBean的afterPropertiesSet()方法
  10. 调用自定义初始方法,即init-method
  11. *调用BeanPostProcessor的postProcessAfterInitialization(Object o, String s)方法
  12. bean可以用了
  13. 容器关闭
  14. 调用DisposableBean的destroy()方法
  15. 调用自动以的销毁方法,即destroy-method.

总结

  1. 生命周期调用方法,大概分为4类:
    1. Bean自身的方法
      1. 构造函数实例化bean,setter熟悉,init-method,destory-method
    2. Bean级生命周期接口
      1. BeanNameAware,BeanFactoryAware,InitializingBean和DisposableBean,这些接口的方法由bean类直接实现
    3. 容器级生命周期接口方法
      1. 带*的有InstantiationAwareBeanPostProcessor和BeanPostProcessor这两个接口实现,一般不由bean本身实现,他们独立于bean,对所有bean其作用,可以针对具体某一bean处理
    4. 工厂后处理方法
  2. bean级的生命周期接口和容器级生命周期接口是个性和共性辩证统一思想的体现。前者解决bean个性化处理问题,后者解决容器中某些bean共性化处理的问题

猜你喜欢

转载自blog.csdn.net/firemaple_li/article/details/82824728