Spring源代码分析
2020-02-21 10:54:59 0 举报
AI智能生成
Spring ApplicationContext启动过程
作者其他创作
大纲/内容
启动AnotationConfigApplicationContext
初始化
加载ContextEventListener
初始化父类GenericApplicationContext
初始化父类AbstractApplicationContext
初始化父类DefaultResourceLoader
初始化基本属性
获取classLoader类加载器
创建resourcePatternReslover
初始化BeanFactory属性为DefaultListableBeanFactory
使用AnnotationBeanDefinitionReader初始化reader属性(参数为自身)
创建ConditionEnvalutor(处理@Condition)
注册配置处理器
设置依赖比较级属性
设置自动注入候选解析器
注册ConfigurationClassPostProcessor后置处理器
注册AutowiredAnnotationBeanPostProcessor后置处理器
检查是否支持JSR250
注册CommonAnnotationBeanPostProcessor后置处理器
检查是否支持JPA
注册EventListenerMethodProcessor处理器
注册DefaultEventListenerFactory
使用ClassPathBeanDefinition初始化scanner属性(参数为自身)
双向绑定scanner和context
注册默认AnnotationTypeFilter
注册Component注解的AnnotationTypeFilter
设置环境environment
用AnnotationConfigApplicationContext设置ResourceLoader
使用AnnotationConfigApplicationContext初始化scanner.resourcePatternReslover
使用CachingMetadataReaderFactory初始化metadataReaderFactory
初始化ComponentsIndex
注册配置类
使用reader注册配置类
将普通的类包装成AnnotateGenericBeanDefinition
使用conditionEvaluator检查Condition是否满足
设置Supplier,用以获取对象
检查对象是否有@Scope注解
有则根据注解内容生成代理模式
设置属性为单例
处理基本注解
查看是否有@Lazy
查看是否有@Primary注解
查看是否有@DependsOn注解
查看是否有@Description注解
查看是否有@Role注解
查看是否有BeanDefinitionCustomizer
将AnnotateGenericBeanDefinition再次包装为BeanDefinitionHolder
根据注解设置代理模式(初始化时为NO)
注册bean到BeanDefinitionRegistry中去
刷新
刷新容器
预刷新上下文
初始化刷新的开始时间
设置close属性为false,表示上下文已启动
设置active属性为true,表示上下文已启动
初始化占位符属性源
默认情况下什么都不做
检查所有必须属性
加载所有提前执行的ApplicationListener
通知子类刷新工厂
设置类加载器
设置Bean表达式处理器
设置属性编辑器注册表
添加感知处理器ApplicationContextAwareProcessor
忽略自动装配接口
EnvironmentAware
EmbeddedValueResolverAware
ResourceLoaderAware
ApplicationEventPublisherAware
MessageSourceAware
ApplicationContextAware
注册可解决依赖
beanFactory
注册BeanFactory
ApplicationContext
注册ResourceLoader
注册ApplicationEventPublisher
注册ApplicationContext
注册ApplicationListenerDetector
检查BeanFactory是否有loadTimeWeaver
添加LoadTimeWeaverAwareProcessor
设置临时ClassLoader
注册environment
注册systemProperty
注册systemEnvironment
后置处理BeanFactory
具体实现暂无
调用BeanFactoryPostProcessor处理BeanFactory
直接调用
处理上下文中的BeanFactoryPostProcessor(默认为空)
注册bean后置处理器
获取所有容器中的BeanPostProcessor
注册一个BeanPostProcessorChecker
排序并添加实现PriorityOrdered接口的BeanPostProcessor
排序并添加实现了Ordered接口的BeanPostProcessor
添加未实现上述接口的BeanPostProcessor
初始化数据源
初始化ApplicationEvent多播器
检查并添加ApplicationEvent多播器
正式刷新
什么也不做
注册监听器
初始化时无监听器可注册
初始化剩余单例
为上下文初始化转换服务
注册默认的值解析器
初始化LoadTimeWeaverAware
关闭临时类加载器
冻结所有配置
预实例化单例
扫描所有单例,逐个处理
实例化非抽象非懒加载单例
是否是FactoryBean
是,进行工厂bean初始化
不是,进行普通Bean初始化
获取单例Bean
初始化刷新
0 条评论
下一页