springIOC容器
2023-03-07 12:56:34 12 举报
spring ioc
作者其他创作
大纲/内容
AbstractApplicationContext
AbstractRefreshableApplicationContext
通过XmlBeanDefinitionReader加载Bean定义
prepareRefresh()
ClassPathXmlApplicationContext
createBeanDefinitionDocumentReader()
PostProcessorRegistrationDelegate
一、执行接口BeanDefinitionRegistryPostProcessors的方法1、先执行实现了PriorityOrdered接口-优先级2、再执行实现了Ordered接口-顺序3、最后执行其他二、执行接口BeanFactoryPostProcessor1、先执行实现了PriorityOrdered接口-优先级2、再执行实现了Ordered接口-顺序3、最后执行其他
doRegisterBeanDefinitions()parseBeanDefinitions()
initApplicationEventMulticaster()
1、加载资源文件2、解析xml标签,执行一个个handler,通过BeanDefinitionParser,将xml标签解析成Bean
可以重写以添加特定于上下文的刷新工作的模板方法。在初始化特殊bean时调用,然后实例化单例1、个性化处理其他Bean,子类实现
finishRefresh()
loadBeanDefinitions()
main
将容器中所有ApplicationListener添加到ApplicationEventMulticaster事件派发器中
BeanDefinitionDocumentReader
initMessageSource()
获得一个BeanFactory的实现类:DefaultListableBeanFactory
font color=\"#4d4d4d\
创建一个BeanFactory的实现类:DefaultListableBeanFactory
国际化处理1、获取beanFactory实例2、判断是否存在id为messageSource的bean3、如果存在赋值给messageSource4、如果不存在则创建一个DelegatingMessageSource并注册到容器中
一、span style=\
new
createBeanFactory()
prepareBeanFactory()
事件派发器处理1、获取beanFactory实例2、判断是否存在id为applicationEventMulticaster的bean3、如果存在赋值给applicationEventMulticaster4、如果不存在则创建一个SimpleApplicationEventMulticaster并注册到容器中
refresh()
1)、initLifecycleProcessor();初始化和生命周期有关的后置处理器;LifecycleProcessor 默认从容器中找是否有lifecycleProcessor的组件【LifecycleProcessor】;如果没有new DefaultLifecycleProcessor(); 加入到容器; 写一个LifecycleProcessor的实现类,可以在BeanFactory void onRefresh(); void onClose(); 2)、 getLifecycleProcessor().onRefresh(); 拿到前面定义的生命周期处理器(BeanFactory);回调onRefresh(); 3)、publishEvent(new ContextRefreshedEvent(this));发布容器刷新完成事件; 4)、liveBeansView.registerApplicationContext(this);==================================总 结==================================1)、Spring容器在启动的时候,先会保存所有注册进来的Bean的定义信息; 1)、xml注册bean;<bean> 2)、注解注册Bean;@Service、@Component、@Bean、xxx2)、Spring容器会合适的时机创建这些Bean 1)、用到这个bean的时候;利用getBean创建bean;创建好以后保存在容器中; 2)、统一创建剩下所有的bean的时候;finishBeanFactoryInitialization();3)、后置处理器;BeanPostProcessor 1)、每一个bean创建完成,都会使用各种后置处理器进行处理;来增强bean的功能; AutowiredAnnotationBeanPostProcessor:处理自动注入 AnnotationAwareAspectJAutoProxyCreator:来做AOP功能; xxx.... 增强的功能注解: AsyncAnnotationBeanPostProcessor ....4)、事件驱动模型; ApplicationListener;事件监听; ApplicationEventMulticaster;事件派发:
刷新前预处理1、初始化上下文环境中的任何占位符属性源2、校验属性合法性
registerBeanPostProcessors()
invokeBeanFactoryPostProcessors()
obtainFreshBeanFactory()
允许在上下文子类中对bean工厂进行后处理
onRefresh()
start()
registerListeners()
doLoadBeanDefinitions()
AbstractXmlApplicationContext
registerBeanDefinitions()
refreshBeanFactory()
finishBeanFactoryInitialization()
设置beanFactory加载器,自动装配(BeanFactory、ApplicationContext等),忽略自动装配(ApplicationContextAware等)
XmlBeanDefinitionReader
解析xml标签,先初始化Handler,调用init方法,再执行handler.parse(),通过BeanDefinitionParser,将xml标签解析成Bean
doLoadDocument()registerBeanDefinitions()
postProcessBeanFactory()
0 条评论
下一页