Spring扫描Bean定义的源码图
2021-08-10 20:17:26 0 举报
Spring扫描Bean定义的源码图
作者其他创作
大纲/内容
register(annotatedClasses);
过滤处理我们自己的主配置类
ClassPathBeanDefinitionScanner类的构造器
this.reader = new AnnotatedBeanDefinitionReader(this);
registry是DefaultListableBeanFactory类型的里面的主要属性是BeanDefinitionMap和BeanDefinitionNames
ConfigurationClassPostProcessor
将@Import,@Bean的Bean定义信息放入容器
往容器中注入主配置类的Bean定义
invokeBeanDefinitionRegistryPostProcessors()
为容器注入系统内部的Bean定义信息
解析我们的主配置类parser.parse(candidates);
@Bean methods
为容器注入自己主配置类的Bean定义
invokeBeanFactoryPostProcessors(beanFactory);调用Bean工厂的后置处理器
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
创建一个条件计算器对象1.初始化条件计算器的Bean定义注册器2.初始化Bean工厂3.为环境变量赋值4.为资源加载器赋值
this.scanner = new ClassPathBeanDefinitionScanner(this);
@ImportResource
@PropertySource
processConfigBeanDefinitions(registry);
往容器中注入系统内部的Bean定义信息
创建类路径下的Bean定义扫描器,为IOC容器赋值
refresh();
this()
往容器的读取器中注册主配置类的Bean定义
如果有多个主配置类,则循环调用registerBean(annotatedClass)
创建BeanDefinitionRegistryPostProcessor的Bean,这里获取的是初始化Spring容器上下文的时候注册了该Bean,ConfigurationClassPostProcessor
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
@ComponentScan
创建Bean定义的读取器,为IOC容器赋值
创建一个配置类@Configuration解析器ConfigurationClassParser
PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors
postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
processConfigurationClass
@Import
this.reader.loadBeanDefinitions(configClasses);
从主配置类开始一层一层的找@Controller,@Service,@Repository. ...
往Bean定义容器中注册6大系统内部的Bean定义解析器1.org.springframework.context.annotation.internalConfigurationAnnotationProcessor。@Configuration2.org.springframework.context.annotation.internalAutowiredAnnotationProcessor @Autowire3.org.springframework.context.annotation.internalRequiredAnnotationProcessor。@Required4.org.springframework.context.annotation.internalCommonAnnotationProcessor。 解析JSR250规范5.org.springframework.context.event.internalEventListenerProcessor 注册支持@EventListener的解析器6.org.springframework.context.event.internalEventListenerFactory。
收藏
0 条评论
回复 删除
下一页