标签解析入口
org.springframework.context.annotation.ComponentScanBeanDefinitionParser
主方法很简洁,如下
public BeanDefinition parse(Element element, ParserContext parserContext) {
String[] basePackages = StringUtils.tokenizeToStringArray(element.getAttribute(BASE_PACKAGE_ATTRIBUTE),
ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
// Actually scan for bean definitions and register them.
ClassPathBeanDefinitionScanner scanner = configureScanner(parserContext, element);
Set<BeanDefinitionHolder> beanDefinitions = scanner.doScan(basePackages);
registerComponents(parserContext.getReaderContext(), beanDefinitions, element);
return null;
}
1、获得需要扫描的路径集合,这个是根据base-package配置来计算出来的
2、实例化一个扫描器,这里返回的实例是:ClassPathBeanDefinitionScanner 对象
3、扫描获得bean定义
4、向容器中注册这些bean定义