Spring Bean的注册
-
实例化 Spring 上下文环境 AnnotationConfigApplicationContext;如果初始化的的时候没有设置工厂就通过父类使用默认的工厂:DefaultListableBeanFactory
-
初始化 AnnotatedBeanDefinitionReader, BeanDefinition 阅读器
- 开始注册工作(通过 AnnotatedBeanDefinitionReader 注册 Bean )org.springframework.context.annotation.AnnotationConfigUtils#registerAnnotationConfigProcessors(org.springframework.beans.factory.support.BeanDefinitionRegistry, java.lang.Object)
-
org.springframework.context.annotation.AnnotationConfigUtils#registerPostProcessor
org.springframework.beans.factory.support.DefaultListableBeanFactory#registerBeanDefinition将 BeanDefinition 注册到 map 当中
-
手动注册 Bean
org.springframework.context.annotation.AnnotationConfigApplicationContext#register
org.springframework.context.annotation.AnnotationConfigApplicationContext#register
org.springframework.context.annotation.AnnotatedBeanDefinitionReader#doRegisterBean
org.springframework.beans.factory.support.BeanDefinitionReaderUtils#registerBeanDefinition
-
初始化 ClassPathBeanDefinitionScanner
Spring 生命周期 refresh 方法
-
准备工作,设置启动时间,是否激活标识位,初始化属性源配置org.springframework.context.support.AbstractApplicationContext#prepareRefresh
-
获取 Bean 工厂,对 Bean 工厂进行属性设置org.springframework.context.support.AbstractApplicationContext#prepareBeanFactory
-
添加类加载器
org.springframework.beans.factory.config.ConfigurableBeanFactory#setBeanClassLoader
-
添加 Bean 表达式解析器org.springframework.beans.factory.config.ConfigurableBeanFactory#setBeanExpressionResolver
-
添加后置处理器
org.springframework.beans.factory.config.ConfigurableBeanFactory#addBeanPostProcessor
-
添加自动注入被忽略的列表
org.springframework.beans.factory.config.ConfigurableListableBeanFactory#ignoreDependencyInterface
-
依赖注册(后续重要)
org.springframework.beans.factory.config.ConfigurableListableBeanFactory#registerResolvableDependency
-
添加 ApplicationListenerDetector 后置处理器,检测实现了ApplicationListener的实现类
org.springframework.beans.factory.config.ConfigurableBeanFactory#addBeanPostProcessor
-
-
目前没有实现
org.springframework.context.support.AbstractApplicationContext#postProcessBeanFactory
-
执行后置处理器org.springframework.context.support.AbstractApplicationContext#invokeBeanFactoryPostProcessors
-
获取程序员自定义的没有被Spring管理的 BeanFactoryPostProcessor
org.springframework.context.support.AbstractApplicationContext#getBeanFactoryPostProcessors
-
处理自定义的 BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor
List<BeanFactoryPostProcessor> regularPostProcessors = new ArrayList<>(); List<BeanDefinitionRegistryPostProcessor> registryProcessors = new ArrayList<>();
-
处理 Spring 内部的 BeanDefinitionRegistryPostProcessor
org.springframework.beans.factory.ListableBeanFactory#getBeanNamesForType(java.lang.Class<?>, boolean, boolean)
-
合并内部的和自定义的 BeanDefinitionRegistryPostProcessor
-
调用了下面的方法org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanDefinitionRegistryPostProcessors
调用扩展方法
org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry
调用下面方法
org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions
调用下面方法获取类的元数据(类的信息)来判断 BeanDefinition 是否包含 @Configuration 注解,如果包含则将这个 bd 标记为 FULL 注解
org.springframework.context.annotation.ConfigurationClassUtils#checkConfigurationClassCandidate
扫描包
org.springframework.context.annotation.ConfigurationClassParser#parse(java.util.Set<org.springframework.beans.factory.config.BeanDefinitionHolder>)
进行类型封装
org.springframework.context.annotation.ConfigurationClassParser#processConfigurationClass
解析配置类;
org.springframework.context.annotation.ConfigurationClassParser#doProcessConfigurationClass
1、处理内部类;
2、解析扫描包
-
解析扫描的一些基本信息
org.springframework.context.annotation.ClassPathBeanDefinitionScanner#doScan