扫描指定目录下的带有@component注解极其派生类,然后将这些类的实例交给BeanDefinitionReqistry,调用其containsBeanDefinition方法判断是否已经存在,如果不存在,则调用registerBeanDefinition,该类在spring的重要性我个人觉得重中之重,不过很多人似乎都对此不感冒,后来我才知道,他们并不了解spring

public static void main(String[] args) {ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(new MyBeanDefinitionRegistry());//扫描指定包下,还有另一个重载方法扫描指定类下的同目录极其子目录下scanner.scan("com.example.studyintegration.spring.aop");}

如果我们还有自己的需求,想把没有带@component注解的类也注册到BeanDefinitionRegistry中,应该怎么办呢,那么需要ClassPathBeanDefinitionScanner类的补充类,AnnotatedBeanDefinitionReader,请参考文章Spring-AnnotatedBeanDefinitionReader

创建时机
在spring当中,创建BeanFactory的时候,那个具体的BeanFactory里一定会new一个ClassPathBeanDefinitionScanner,比如如下代码

ConfigurableApplicationContext applicationContext = new AnnotationConfigApplicationContext("包1","包2");

我们进入AnnotationConfigApplicationContext的构造方法

 public AnnotationConfigApplicationContext(String... basePackages) {//你会发现在此处调用了默认的构造方法,我们再去下面看默认构造方法this();scan(basePackages);refresh();}

接下来我们看默认的构造方法

public AnnotationConfigApplicationContext() {this.reader = new AnnotatedBeanDefinitionReader(this);this.scanner = new ClassPathBeanDefinitionScanner(this);}

没错,就是在这里,new了一个ClassPathBeanDefinitionScanner,参数是BeanDefinitionRegistry,也就是this,此处正好应和了前文的“创建时机”

现在,我知道了ClassPathBeanDefinitionScanner这个类是在创建BeanFactory的时候创建的,这是很重要的一步探索,那么创建完毕之后,坐等调用ClassPathBeanDefinitionScanner的scan方法

Spring-ClassPathBeanDefinitionScanner相关推荐

  1. spring中classpathbeandefinitionscanner检测类路径上的bean,生成beandefinition的过程

    这个图是classpathbeandefinitionscanner中的doscan方法的执行流程.

  2. Spring 容器的启动过程

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 本文来源:http://r6f.cn/b47K 一. 前言 ...

  3. 看看Spring的源码(一)——Bean加载过程

    首先Web项目使用Spring是通过在web.xml里面配置 org.springframework.web.context.ContextLoaderListener初始化IOC容器的. <l ...

  4. Spring component-scan类扫描加载过程

    2019独角兽企业重金招聘Python工程师标准>>> https://github.com/javahongxi 有朋友最近问到了spring加载类的过程,尤其是基于annotat ...

  5. Spring 中 @Component、@Service 等注解如何被解析?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://8rr.co/EjqL 前言 @ ...

  6. 80%以上Javaer可能不知道的一个Spring知识点

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 来源:字节观 关注我,回复口令获取可获取独家整理的学习资料: - 001 :领取<Spring ...

  7. 剑指Spring源码(一)

    Spring,相信每个Java开发都用过,而且是每天都在用,那强大又神秘的IoC,AOP,让我们的开发变得越来越简单,只需要一个注解搞定一切,但是它内部到底是什么样子的呢?跟着我,一起探究Spring ...

  8. spring mybatis 整合jar 包冲突问题

    使用mybatis3.1.1+spring3.2.0+spring-mybatis+1.3.0(或者1.1.1)在 使用<bean class="org.mybatis.spring. ...

  9. Spring第一讲:初步了解Spring

    一.什么是Spring,什么是bean? Spring是一种框架,Spring框架主要提供了IoC容器.AOP.数据访问.Web开发.消息.测试等相关技术的支持.每一个没Spring管理的 Java对 ...

  10. spring boot源码分析之SpringApplication

    spring boot提供了sample程序,学习spring boot之前先跑一个最简单的示例: /** Copyright 2012-2016 the original author or aut ...

最新文章

  1. 论文:贝叶斯优化算法和应用综述(2)--概率模型和采集函数的介绍以及综述列表
  2. python语言程序设计基础网课-Python语言程序设计基础答案
  3. 谷歌搜索没有相机图标_谷歌Pixel 2/3a/4 XL中招!更新安卓11相机崩溃
  4. 【干货】嘿,产品经理 ,这些技术是一定要懂的
  5. 如何“漂亮”地解决dota类游戏网络延迟同步?
  6. 为什么手机游戏手柄没有流行起来?
  7. Java中Map, List, Set和Queue的区别和使用场景
  8. xuperchain 事件订阅 判断交易是否上链 交易状态
  9. android studio moudel,Android Studio中Project和Module的关系
  10. 计算机专业英语张强华答案,计算机专业英语答案
  11. PHP字符串函数ucfirst( 将字符串的首字母转换为大写)
  12. 299美元企业级账号申请过程
  13. 全球首次!32岁青年科学今天发现!道翰天琼认知智能机器人平台API接口大脑为您揭秘。
  14. CVE20190708复现
  15. 阿里巴巴 淘特技术部 内推
  16. 数据平台建设的痛点,如何进行元数据治理?
  17. 中国污水源热泵运行现状分析与投资策略报告2022-2027年
  18. linux版_百度输入法Linux版发布 | 欧侃在线“统一源”提供直接安装
  19. 激光打印机常见加粉问题与使用技巧
  20. 【微信读书】 《乔布斯传》Walter Isaacson 读书笔记

热门文章

  1. CSDN使用富文本编辑器为所发布的文章生成右侧目录
  2. 线程池框架-Executor
  3. Python中的pip包管理工具被删除重新进行安装
  4. vi/Vim的快速使用
  5. java dataurl_FileReader生成图片dataurl的分析
  6. string获取 倒数 下标_NBA球星福克斯沉迷LOL,排名美服倒数98名!胜率太真实了...
  7. User can only log in via localhost
  8. rabbitmq如何清空queue队列数据
  9. java二次雷达编码地址
  10. Java使用swagger时显示实体类注解问题