首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring 源码学习 07:ClassPathBeanDefinitionScanner

Spring 源码学习 07:ClassPathBeanDefinitionScanner

作者头像
程序员小航
发布于 2020-12-15 03:29:57
发布于 2020-12-15 03:29:57
4780
举报
文章被收录于专栏:程序员小航程序员小航

前言

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

1

源码分析

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 赋值操作,基本上如代码所示。

2

总结

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

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

- <End /> -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小航 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring IoC 源码分析 (基于注解) 一
IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。
周同学
2019/08/29
1.2K0
Spring  IoC 源码分析 (基于注解) 一
面试官:说说SpringBoot中Spring容器的启动过程
Spring家族特别庞大,对于开发人员而言,要想全面征服Spring家族,得花费不少的力气。俗话说,打蛇打七寸,那么Spring家族的“七寸”是什么呢?我心目中的答案一直都是 Spring Framework!
业余草
2020/10/10
2.9K0
面试官:说说SpringBoot中Spring容器的启动过程
Spring源码(三)-Context的创建核心逻辑(下)
由于该篇文章较多,所以就拆分为了上下两篇,接上面完成了beanFactory的信息处理,接下来是bean的相关定义的处理。
码农小胖哥
2019/12/05
6060
2.2 spring5源码 -- ioc加载的整体流程
之前我们知道了spring ioc的加载过程, 具体如下图. 下面我们就来对照下图, 看看ioc加载的源代码.
用户7798898
2020/09/27
6060
2.2 spring5源码 -- ioc加载的整体流程
逐行阅读Spring5.X源码(六) ClassPathBeanDefinitionScanner扫描器
spring包扫描是通过ClassPathBeanDefinitionScanner类来完成的,它主要工作有两个:
源码之路
2020/09/04
7080
逐行阅读Spring5.X源码(六) ClassPathBeanDefinitionScanner扫描器
Spring5源码 - 00 IOC容器创建_前期准备
这里我们分析一下AnnotationConfigApplicationContext 构造函数中的前两个方法
小小工匠
2021/08/17
2390
《Spring核心技术》第2章:@ComponentScan注解,又是三万字!!
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 源码地址:https://github.com/binghe001/spring-annotation-book/tree/master/spring-annotation-chapter-02
冰河
2023/02/21
8090
《Spring核心技术》第2章:@ComponentScan注解,又是三万字!!
逐行阅读Spring5.X源码(番外篇)自定义扫描器, Mybatis是如何利用spring完成Mapper扫描的
上一篇详细讲解了spring的扫描器ClassPathBeanDefinitionScanner,本篇我们我们将模拟mybatis如何通过spring完成Mapper扫描,讲解如何通过spring编写自定义扫描器。 既然ClassPathBeanDefinitionScanner完成了spring的扫描功能,我们完全可以继承这个类来达到创建自定义扫描器的目的。
源码之路
2020/09/04
1.3K0
这一次搞懂Spring自定义标签以及注解解析原理
在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的。同时我们常用的注解如:@Service、@Component、@Controller标注的类也是需要在xml中配置<context:component-scan>才能自动注入到IOC容器中,所以本篇也会重点分析注解解析原理。
夜勿语
2020/09/07
5740
@ComponentScan原理分析
这是@ComponentScan的官方介绍,大致意思就是扫描注册bean的一个注解,会扫描对应路径下被@Component标注的类,和xml方式的<context:component-scan>作用相似,常用的方式是basePackages方式。
叔牙
2022/01/04
9180
@ComponentScan原理分析
从Spring源码探究IOC初始化流程
本文是基于注解的IOC初始化,不是XML!!! 代码的含义我都以注释的形式写在代码块中了,请放心查阅
向着百万年薪努力的小赵
2022/12/02
5400
【小家Spring】Spring解析@ComponentScan注解源码分析(ComponentScanAnnotationParser、ClassPathBeanDefinitionScanner)
前面我在这篇博文:【小家Spring】Spring解析@Configuration注解的处理器:ConfigurationClassPostProcessor(ConfigurationClassParser) 解释Spring解析@Configuration的时候,提到过了解析:@PropertySource、@ComponentScan、@Import…等等的解析过程。
YourBatman
2019/09/03
1.6K0
java架构之路-(spring源码篇)springIOC容器源码解析(上)
  我们这次来叭叭一下Spring的源码,这次博客主要来说说Spring源码,先粗略的撸一遍,下篇博客选几个重点去说,由于过于复杂,我也是看了一点点,我们先来过一遍源码,然后上流程图,最后我们再回头总结一下,我们来循序渐进的叭叭一下。
小菜的不能再菜
2019/10/09
3440
java架构之路-(spring源码篇)springIOC容器源码解析(上)
【小家Spring】Spring容器加载Bean定义信息的两员大将:AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner
在分析Spring IOC容器启动流程的时候,在加载Bean定义信息BeanDefinition的时候,用到了两个非常关键的类:AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner。它俩完成对Bean信息的加载。
YourBatman
2019/09/03
2.4K0
【小家Spring】Spring容器加载Bean定义信息的两员大将:AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner
SpringBoot源码解析(十):应用上下文AnnotationConfigServletWebServerApplicationContext构造方法
在前文中,我们了解了应用上下文、Bean工厂以及Bean定义的核心组件功能,接下来,我们将深入探讨应用上下文的构造方法。
Java微观世界
2025/02/11
2370
SpringBoot源码解析(十):应用上下文AnnotationConfigServletWebServerApplicationContext构造方法
Spring源码解析(二):bean容器的创建、注册默认后置处理器、bean定义扫描类
Java微观世界
2025/01/21
3760
Spring源码解析(二):bean容器的创建、注册默认后置处理器、bean定义扫描类
SpringFramework之ClassPathBeanDefinitionScanner
                                                                                         图1
克虏伯
2019/06/28
9600
SpringFramework之ClassPathBeanDefinitionScanner
从servlet容器到Spring mvc 5.1.1.RELEASE IoC 启动源码分析
容器启动会执行ServletContextListener的contextInitialized方法,对于Spring来说,它就是执ContextLoaderInitialized方法。
爬蜥
2024/02/21
1240
从servlet容器到Spring mvc 5.1.1.RELEASE IoC 启动源码分析
Spring注解Component原理源码解析
在实际开发中,我们经常使用Spring的@Component、@Service、@Repository以及 @Controller等注解来实现bean托管给Spring容器管理。Spring是怎么样实现的呢?我们一起跟着源码看看整个过程吧!
GreizLiao
2019/10/14
1.4K0
Spring注解Component原理源码解析
Spring源码:bean的生命周期(一)
本节将正式介绍Spring源码细节,将讲解Bean生命周期。请注意,虽然我们不希望过于繁琐地理解Spring源码,但也不要认为Spring源码很简单。在本节中,我们将主要讲解Spring 5.3.10版本的源代码。如果您看到的代码与我讲解的不同,也没有关系,因为其中的原理和业务逻辑基本相同。为了更好地理解,我们将先讲解Bean的生命周期,再讲解Spring的启动原理和流程,因为启动是准备工作的一部分。
努力的小雨
2024/04/30
1700
推荐阅读
相关推荐
Spring IoC 源码分析 (基于注解) 一
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档