spring源码解析-配置类扫描

本文详细解析了Spring配置类扫描的过程,包括beanDefinition如何注入到Spring容器,涉及BeanDefinitionRegistryPostProcessor、ConfigurationClassPostProcessor等关键步骤。在扫描过程中,配置类的@ComponentScan会找到并注册@Component注解的类,最后所有beanDefinition被注入到beanFactory中。
摘要由CSDN通过智能技术生成

spring源码解读(二)spring配置类扫描beanDefinition注入

本次主要记录spring将bean定义扫描进spring容器的过程
1 进入到invokeBeanFactoryPostProcessors方法内
在这里插入图片描述
上图中的beanFactoryPostProcessors是在容器还未扫描的时候里面是否存在beanFactoryPostProcessors,一般为空,(程序员可手动添加,但是一般不会这样干)

在这里插入图片描述
这一行会从bd中拿到继承了BeanDefinitionRegistryPostProcessor接口的bd名字,拿出一个,org.springframework.context.annotation.internalConfigurationAnnotationProcessor。(bd现在有6个,5个是spring自己注入的bd,还有一个我们自己注入的App的bd)

int var10;
            String ppName;
            for(var10 = 0; var10 < var9; ++var10) {
                ppName = var16[var10];
                if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) {			//ConfigurationClassPostProcessor 这个类是实现了PriorityOrdered接口
                    currentRegistryProcessors.add(beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class));	//通过getBean初始化bean,具体过程留在后面,这里我们发现ConfigurationClassPostProcessor
                   			//的对象被加进了beanFactory的单列池,现在单列池有四个bean																																												
                    processedBeans.add(ppName);		//添加进集合
                }
            }

            sortPostProcessors(currentRegistryProcessors, beanFactory);		//如果上一步有多个实现了BeanDefinitionRegistryPostProcessor, PriorityOrdered借口的bean,这里会进行排序,一般一个
            registryProcessors.addAll(currentRegistryProcessors);	// 添加进集合	
            invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);	//执行BeanDefinitionRegistryPostProcessor的postProcessBeanDefinitionRegistry方法
            currentRegistryProcessors.clear();	
            postProcessorNames = beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false);
            var16 = postProcessorNames;
            var9 = postProcessorNames.length;

单列池现有4个bean
在这里插入图片描述
进入到BeanDefinitionRegistryP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值