Spring-ContainerRuntime
2017-06-09 23:19:48 0 举报
java spring
作者其他创作
大纲/内容
设置对象属性
[T]getObject();
BeanDefinition转化为BeanWrapper
DefaultSingleton-BeanRegistry
只针对BeanFactory类型的容器而言。
该类的postProcessBeforeInitialization()集中设置了ApplicationContext的各种Aware
Instantiate VS Initializer实例化 vs 初始化
检查Aware相关接口并设置相关依赖
BeanPostProcessor'spostProcess-Before-Initialization()
检查是否是InitializingBean以决定是否调用afterPropertiesSet()
instantiate
BeanPostProcessor后置处理
是否实现DisposableBean接口
对象实例化,初始化阶段
Call custominit-method
BeanPostProcessor'spostProcess-After-Initialization()
instantiate(实例化)
ApplicationEventPublisherAware
SmartInstantiationAwareBeanPostProcessor
InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation()
Abstract-BeanFactory
内部接口
InitializingBean'safterPropertiesSet()
MessageSourceAware
InstantiationAwareBeanPostProcessor
是否配置有自定义destroy方法
ApplicationContextAwareProcessor
ConfigurableApplicationContext;
Abstract-AutowireCapable-BeanFactory
Aware
Initialize the bean instance(初始化)
DisposableBean'sdestroy()
BeanClassLoaderAware
检测是否能使用的InstantiationAwareBeanPostProcessor来构造对象实例
ObjectFactory
After-initialization
检查是否配置有自定义的init-method
BeanNameAware
MergedBeanDefinitionPostProcessor'spostProcessMergedBeanDefinition()
Call customdestroy-method
ApplicationContextAware
XXXAware'ssetXXX()
在第一步构造完成对象之后,Spring会根据对象实例构造一个BeanWrapperImpl实例,然后将之前CustomEditorConfigurer注册的PropertyEditor复制一份给BeanWrapperImpl实例(这就是BeanWrapper同时又是PropertyEditorRegistry的原因)。这样,当BeanWrapper转换类型、设置对象属性值时,就不会无从下手了。
BeanPostProcessor前置处理
InstantiationAwareBeanPostProcessor接口可以在对象实例化中实现“shortcut”效果: 也就是在Instantiation(实例化) bean对象步骤之前, 容器会首先检查容器中是否注册有InstantiationAwareBeanPostProcessor类型的BeanPostProcessor。 如果有,首先使用相应的InstantiationAwareBeanPostProcessor来构造对象实例。 构造成功后直接返回构造完成的对象实例,而不会按照“正规的流程”继续执行。
Get Bean
实例化bean对象
BeanPostProcessor
AbstractBeanFactory
doGetBean();
ApplicationContext类型的容器部分Aware[注意在这里Aware的分析是在BeanPostProcessor中进行]
getBean--instantiation bean--initialize the bean
MergedBeanDefinitionPostProcessor
注册必要的Destruction相关回调接口
BeanWrapper(...)
ResourceLoaderAware
Populate properties
BeanFactoryAware
Before-initialization
使用中
Add property values based on autowire
BeanFactory和ApplicationContext的Bean实例化阶段共同入口:
收藏
收藏
0 条评论
下一页