1、BeanFactory
1.1、BeanDefinition类结构
1.2、BeanFactory类结构
2、ApplicationContext
2.1、类层次结构
2.2、AbstractApplicationContext刷新时序图
prepareRefresh :初始化属性源(PropertySource)及环境(Environment)
obtainFreshBeanFactory:主要是refreshBeanFactory和getBeanFactory,refreshBeanFactory有些实现类,如AbstractRefreshableApplicationContext是加载BeanDefinition,自定义BeanFactory。
prepareBeanFactory:添加PropertyEditorRegistrar,添加BeanPostProcessor,比如ApplicationContextAwareProcessor、ApplicationListenerDetector、LoadTimeWeaverAwareProcessor,添加需要忽略的依赖接口ignoreDependencyInterface(EnvironmentAware、EmbeddedValueResolverAware、ResourceLoaderAware、ApplicationEventPublisherAware、MessageSourceAware、ApplicationContextAware、ApplicationStartup),注册可解析的依赖registerResolvableDependency(BeanFactory、ResourceLoader、ApplicationEventPublisher、ApplicationContext),在查找findAutowireCandidates会用到,注册一些单例(environment,systemProperties,systemEnvironment,applicationStartup)
postProcessBeanFactory:后置处理BeanFactory,在WebApplicationContext中,会另外添加一些BeanPostProcessor。
invokeBeanFactoryPostProcessors:调用PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors
- BeanFactory是BeanDefinitionRegistry的实例,将BeanFactoryPostProcessor分为两类,一类是BeanDefinitionRegistryPostProcessor,另一类是正常的BeanFactoryPostProcessor,同时对于BeanDefinitionRegistryPostProcessor,调用postProcessBeanDefinitionRegistry。对于实现BeanDefinitionRegistryPostProcessor和PriorityOrdered的bean,排序后依次调用postProcessBeanDefinitionRegistry,然后对于实现BeanDefinitionRegistryPostProcessor和Ordered的bean,排序后依次调用postProcessBeanDefinitionRegistry,对于其它的,则排序后依次调用 postProcessBeanDefinitionRegistry,调用BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor的postProcessBeanFactory
- BeanFactory不是BeanDefinitionRegistry的实例,直接调用postProcessBeanFactory
registerBeanPostProcessors:调用PostProcessorRegistrationDelegate.registerBeanPostProcessors注册BeanPostProcesor。获取实现了BeanPostProcessor的Bean,分为三类,实现PriorityOrder,Order及没有次序的。
initMessageSource:初始化消息源。
initApplicationEventMulticaster:初始化事件发布器。
onRefresh:在具体的上下文子类中初始化其它特殊的bean
registerListeners:注册特殊的监听器,添加实现了ApplicationListener的bean到监听器中,同时 发布可以早期发布的事件。
finishBeanFactoryInitialization:设置ConversionService,添加EmbeddedValueResolver,创建实现LoadTimeWeaverAware的Bean实例,冻结配置,调用beanFactory.preInstantiateSingletons实例化所有的非惰性初始化的单例,触发所有bean实例的初始化的回调(即实现SmartInitializingSingleton)。
finishRefresh:清除资源缓存(clearResourceCaches),初始化生命周期处理器(initLifecycleProcessor),传递fresh到生命周期处理器(即实现LifeCycle的 bean调用start),发布ContextRefreshedEvent事件。
2.3、BeanDefinition的载入
(1)解析属性id,name,同时name当作别名,如果id为空,则将第一个别名作为beanName,同时检查名字的唯一性
(2) 解析class,parent,基于此创建GenericBeanDefinition
(3) 解析bean属性,singleton,scope,abstract,lazy_init,autowire,depends-on,autowire-candidate,primary,init-method,destory-method,factory-method,factory-bean属性
(4)解析子结点的meta结点
(5)解析子结点的lookup-method结点
(6)解析子结点的replace-method结点
(7)解析constructor-arg子结点,解析index,type,name,ref,value属性,ref,value属性只能有其中一个。其子结点下只能有一个子结点。可能有下面几中子结点bean,ref,idref,value,null,array,list,set,map,props
(8)解析子结点property
(9)解析子结点qualifier
3、Bean创建
3.1、创建实例策略类
有三种方式来实例化,一种通过BeanDefinition中的定义的beanClass,通过其获取默认构造函数来实体化,另外一种是通过指定的构造器实体化,最后一种是通过工厂方法来实例化
3.2 bean创建时序图
BeanPostProcessor在bean创建时序过程中调用顺序为
- MergedBeanDefinitionPostProcessor
- InstantiationAwareBeanPostProcessor
- SmartInstantiationAwareBeanPostProcessor(解决循环依赖)
- BeanPostProcessor
4、BeanPostProcessor
4.1、类结构
BeanPostProcessor:允许自定义修改bean实例的工厂钩子
InstantiationAwareBeanPostProcessor:BeanPostProcessor的子接口,用于添加实例化之前回调及实例化后显示属性调协或者autowire发生前的回调
MergedBeanDefinitionPostProcessor:在合并Bean定义时的后置处理回调
SmartInstantiationAwareBeanPostProcessor:InstantiationAwareBeanPostProcessor接口的扩展,添加预测处理bean的最终类型的回调。在创建实例时应用,包含确定使用构造函数,及针对循环依赖时的早期引用处理。
DestructionAwareBeanPostProcessor:BeanPostProcessor的子接口,用于添加销毁前的回调
5、bean属性
5.1、类层次结构
6、type转换
6.1、类层级结构
主要包含Converter及Formatter
7、BeanFactoryPostProcessor
7.1、类结构图
8、MessageSource
用于国际化的接口,其类图结构为