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