spring源码(十)--ComponentScanBeanDefinitionParser(以及命名空间处理器)

本文介绍如何通过四个步骤解析XML文件中的component-scan标签:获取并解析base-package属性,创建ClassPathBeanDefinitionScanner实例,扫描指定包内的组件,并将带有component注解的bean注册到容器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是用来解析xml文件中,componentscan 标记的
componentscan


大体上分四步:

  1. 获取 base-package属性,使用,; 分割每个目录
  2. 创建scanner
  3. 使用scanner解析目录中所有的文件
  4. 筛选出带有component注解(controller等注解也算component)的bean,注册到ReaderEventListener和factory中

方法为

public BeanDefinition parse(Element element, ParserContext parserContext) {
    String basePackage = element.getAttribute("base-package");
    basePackage = parserContext.getReaderContext().getEnvironment().resolvePlaceholders(basePackage);
    String[] basePackages = StringUtils.tokenizeToStringArray(basePackage, ",; \t\n");
    ClassPathBeanDefinitionScanner scanner = this.configureScanner(parserContext, element);
    Set<BeanDefinitionHolder> beanDefinitions = scanner.doScan(basePackages);	//会把扫描到的beanDefinition注册到factory中
    this.registerComponents(parserContext.getReaderContext(), beanDefinitions, element); //把扫描到的bean和一些processer打包成CompositeComponentDefinition,然后注册到ReaderEventListener中
    return null;
}

命名空间处理器
property-overridePropertyOverrideBeanDefinitionParser
annotation-configAnnotionConfigBeanDefinitionParser
mbean-serverMBeanServerBeanDefinitionParser
component-scanComponentScanBeanDefinitionParser
load-time-weaverLoadTimeWeaverBeanDefinitionParser
property-placeholderPropertyPlaceholderBeanDefinitionParser
spring-configuredSpringConfiguredBeanDefinitionParser
mbean-exportMBeanExportBeanDefinitionParser

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值