Spring 源码学习 07:ClassPathBeanDefinitionScanner

前言
AnnotationConfigApplicationContext 构造函数除了初始化一个 reader ,还有一个 scanner,下面来一起看看 ClassPathBeanDefinitionScanner 都有什么逻辑。
 
 源码分析
this.scanner = new ClassPathBeanDefinitionScanner(this); 代码如下所示:
 
 其中 useDefaultFilters 默认设置的 true。所以最终会执行下面三部分代码:
- registerDefaultFilters(); 
- setEnvironment(environment); 
- setResourceLoader(resourceLoader); 
 
 再来看下 UML :
ClassPathBeanDefinitionScanner 继承了 ClassPathScanningCandidateComponentProvider,而上面说的这三个方法,其实都是父类 ClassPathScanningCandidateComponentProvider 的方法。
对应的这三个操作就是给它的参数赋值:
 
 registerDefaultFilters
 
 本步骤主要是添加过滤器,对 includeFilters 赋值。 注册过滤器 @Component,@Controller @Service、 @Repository 也会被添加进去。
也会注册添加 JSR-250 的 @ManagedBean 和 JSR-330 的 @Named 注解。
setEnvironment
 
 setResourceLoader
 
 setEnvironment 和 setResourceLoader 赋值操作,基本上如代码所示。
总结
 
 这一步主要是初始化类扫描器,在它初始化的时候,会初始化一些需要被扫描的注解,以及资源加载器。
到此,无参构造已经执行完毕。总结一下,这两部分分别是初始化默认的处理器,以及初始化类扫描器,资源加载器。
相关推荐
版权声明: 本文为 InfoQ 作者【程序员小航】的原创文章。
原文链接:【http://xie.infoq.cn/article/0b2a98307beea7ae81bb54f34】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。












 
    
评论