SpringBean的生命周期流程图

上一篇 << 下一篇 >>>SpringBean单例情况下解决循环依赖的原理


SpringBean生命周期的执行步骤

1.进入到刷新refresh()方法
2.finishBeanFactoryInitialization()初始化所有单例对象
3.preInstantiateSingletons()初始化所有的单例对象:注意是非懒加载
4、getBean(beanName)->doGetBean()->createBean()->doCreateBean()->createBeanInstance()初始化对象(默认情况下使用Java反射机制初始化对象,也可以通过CGLIB)
5.populateBean()给对象的set属性赋值
6.initializeBean()执行初始化方法(也可以自己定义初始化的方法)
6.1.invokeAwareMethods()判断bean的类型是否是Aware相关依赖,如果存在的情况回调方法
6.2.applyBeanPostProcessorsBeforeInitialization()在初始化方法之前执行处理(增强)
6.3.invokeInitMethods()调用自定义的init方法,Java反射技术
6.4.applyBeanPostProcessorsAfterInitialization()在初始化方法之后执行处理(增强)
7.正常使用我们初始化好的这个Bean对象
8.销毁bean

BeanPostProcessor作用

这个是后置处理器,从api分析可以看出
1:后置处理器的postProcessorBeforeInitailization方法是在bean实例化,依赖注入之后及自定义初始化方法(例如:配置文件中bean标签添加init-method属性指定Java类中初始化方法、
@PostConstruct注解指定初始化方法,Java类实现InitailztingBean接口)之前调用
2:后置处理器的postProcessorAfterInitailization方法是在bean实例化、依赖注入及自定义初始化方法之后调用

在过滤器如何使用spring注入的对象

无法获取,因为过滤器无法拿到Spring的上下文

BeanNameAware和BeanFactoryAware

BeanNameAware是让Bean获取自己在BeanFactory配置中的名字(根据情况是id或者name)。
BeanFactoryAware是让bean在初始化的时候就拿到配置它们的BeanFactory的引用,可以通过工厂做一些getBean等相关的事情,不过不建议这么做。


推荐阅读:
<< << << << << << << <<<手动事务和自定义注解事务代码参考
<<

你可能感兴趣的:(SpringBean的生命周期流程图)