图文

Spring 源码学习 07:ClassPathBeanDefinitionScanner

Spring 源码学习 07:ClassPathBeanDefinitionScanner:原封面
文章目录2 节

本文发表已超过一年,部分内容可能已过时。

Spring 源码学习 07:ClassPathBeanDefinitionScanner

前言

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

Spring 源码学习配图 1

源码分析

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

Spring 源码学习配图 2

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

  1. registerDefaultFilters();
  2. setEnvironment(environment);
  3. setResourceLoader(resourceLoader);

Spring 源码学习配图 3

再来看下 UML :

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

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

Spring 源码学习配图 4

registerDefaultFilters

Spring 源码学习配图 5

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

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

setEnvironment

Spring 源码学习配图 6

setResourceLoader

Spring 源码学习配图 7

setEnvironment 和 setResourceLoader 赋值操作,基本上如代码所示。

总结

Spring 源码学习配图 8

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

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

相关推荐

打开原图

订阅更新,继续阅读新的实践记录

最近发布

评论

隐私提示

昵称、网址和评论内容会公开显示,邮箱不公开。请勿在评论中填写敏感信息。