写点什么

Spring 源码学习 07:ClassPathBeanDefinitionScanner

发布于: 2020 年 12 月 06 日
Spring 源码学习 07:ClassPathBeanDefinitionScanner

前言


AnnotationConfigApplicationContext 构造函数除了初始化一个 reader ,还有一个 scanner,下面来一起看看 ClassPathBeanDefinitionScanner 都有什么逻辑。



源码分析


this.scanner = new ClassPathBeanDefinitionScanner(this); 代码如下所示:



其中 useDefaultFilters 默认设置的 true。所以最终会执行下面三部分代码:


  1. registerDefaultFilters();

  2. setEnvironment(environment);

  3. setResourceLoader(resourceLoader);



再来看下 UML :


ClassPathBeanDefinitionScanner 继承了 ClassPathScanningCandidateComponentProvider,而上面说的这三个方法,其实都是父类 ClassPathScanningCandidateComponentProvider 的方法。


对应的这三个操作就是给它的参数赋值:



registerDefaultFilters



本步骤主要是添加过滤器,对 includeFilters 赋值。 注册过滤器 @Component@Controller @Service@Repository 也会被添加进去。


也会注册添加 JSR-250 的 @ManagedBean 和 JSR-330 的 @Named 注解。


setEnvironment



setResourceLoader



setEnvironmentsetResourceLoader 赋值操作,基本上如代码所示。


总结



这一步主要是初始化类扫描器,在它初始化的时候,会初始化一些需要被扫描的注解,以及资源加载器。


到此,无参构造已经执行完毕。总结一下,这两部分分别是初始化默认的处理器,以及初始化类扫描器,资源加载器。


相关推荐



发布于: 2020 年 12 月 06 日阅读数: 30
用户头像

个人公众号:『 程序员小航 』 2020.07.30 加入

某不知名互联网公司 Java 程序员一枚。记录工作学习中的技术、开发及源码笔记;分享生活中的见闻感悟。

评论

发布
暂无评论
Spring 源码学习 07:ClassPathBeanDefinitionScanner