Spring IOC 加载流程
2023-01-09 17:18:38 10 举报
AI智能生成
登录查看完整内容
简单记录一下 Spring IOC 加载流程
作者其他创作
大纲/内容
AnnotationConfigApplicationContext
创建容器
DefaultListableBeanFactory
构造一个BeanFactory对象
主要作用添加一些基础的PostProcessor,同时可以通过reader进行BeanDefinition的注册
解析@Conditional注解
ConditionEvaluator
用来进行排序
AnnotationAwareOrderComparator
用来解析某个Bean能不能进行自动注入
如果是则会在注入时先生成一个代理对象注入给属性,所以懒注入并不代表属性为null
ContextAnnotationAutowireCandidateResolver
ConfigurationClassPostProcessor
AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
EventListenerMethodProcessor
DefaultEventListenerFactory
向BeanFactory中添加BeanDefinition
构造AnnotatedBeanDefinitionReader
主要作用可以用来扫描得到并注册BeanDefinition
设置this.includeFilters = AnnotationTypeFilter(Component.class)
构造ClassPathBeanDefinitionScanner
AnnotatedGenericBeanDefinition
注册AppConfig为BeanDefinition
准备工作
记录启动时间
可以允许子容器设置一些内容到Environment中
验证Environment中是否包括了必须要有的属性
prepareRefresh
进行BeanFactory的refresh
再调用子类的getBeanFactory方法,重新得到一个BeanFactory
obtainFreshBeanFactory
设置beanFactory的类加载器
StandardBeanExpressionResolver
设置表达式解析器,用来解析Spring中的表达式
注入一下基本的类型转换器
添加 PropertyEditorRegistrar
处理 Aware 接口
添加 ApplicationContextAwareProcessor
这个功能仅限于xml的autowire,@Autowired注解是忽略这个属性
添加 ignoredDependencyInterface
在byType进行依赖注入时,会先从这个属性中根据类型找bean
添加 resolvableDependencies
发现并记录所有 ApplicationListener
添加 ApplicationListenerDetector
AspectJ 相关
添加 LoadTimeWeaverAwareProcessor
Environment对象
environment
System.getProperties()
systemProperties
System.getenv()
systemEnvironment
添加环境到Spring中
prepareBeanFactory
提供给AbstractApplicationContext的子类进行扩展
postProcessBeanFactory
手动添加的->PriorityOrdered->Ordered->剩下的所有
执行顺序
解析配置类
正常情况下只会有 ConfigurationClassPostProcessor
执行BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry
执行BeanDefinitionRegistryPostProcessor#postProcessBeanFactory
执行BeanFactoryPostProcessor#postProcessBeanFactory
执行BeanFactoryPostProcessor
invokeBeanFactoryPostProcessors
会把BeanFactory中所有的BeanPostProcessor找出来并实例化得到一个对象
最后再重新添加一个ApplicationListenerDetector对象(之前其实就添加了过,这里是为了把ApplicationListenerDetector移动到最后)
registerBeanPostProcessors
让ApplicationContext拥有国际化的功能
initMessageSource
让ApplicationContext拥有事件发布的功能
initApplicationEventMulticaster
onRefresh
获取ApplicationListener类型的beanName,然后添加applicationEventMulticaster中去
registerListeners
实例化非懒加载的单例Bean
finishBeanFactoryInitialization
设置lifecycleProcessor,默认为DefaultLifecycleProcessor
initLifecycleProcessor
调用所有LifecycleBean的start()
发布 ContextRefreshedEvent
finishRefresh
refresh
spring IOC 加载流程
0 条评论
回复 删除
下一页