SpringBean的生命周期流程图
上一篇 <<<Spring IOC的初始化原理
下一篇 >>>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等相关的事情,不过不建议这么做。
推荐阅读:
<<<Spring IOC的初始化原理
<<<SpringBean单例情况下解决循环依赖的原理
<<<Spring AOP的底层原理
<<<Spring AOP通知责任链模式图解
<<<Spring AOP核心源码解读
<<<Spring事务常识汇总
<<<Spring声明事务原理及核心源码分析
<<<手动事务和自定义注解事务代码参考
<<<Spring常用注解汇总