Spring-ClassPathBeanDefinitionScanner
扫描指定目录下的带有@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相关推荐
- spring中classpathbeandefinitionscanner检测类路径上的bean,生成beandefinition的过程
这个图是classpathbeandefinitionscanner中的doscan方法的执行流程.
- Spring 容器的启动过程
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 本文来源:http://r6f.cn/b47K 一. 前言 ...
- 看看Spring的源码(一)——Bean加载过程
首先Web项目使用Spring是通过在web.xml里面配置 org.springframework.web.context.ContextLoaderListener初始化IOC容器的. <l ...
- Spring component-scan类扫描加载过程
2019独角兽企业重金招聘Python工程师标准>>> https://github.com/javahongxi 有朋友最近问到了spring加载类的过程,尤其是基于annotat ...
- Spring 中 @Component、@Service 等注解如何被解析?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://8rr.co/EjqL 前言 @ ...
- 80%以上Javaer可能不知道的一个Spring知识点
点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 来源:字节观 关注我,回复口令获取可获取独家整理的学习资料: - 001 :领取<Spring ...
- 剑指Spring源码(一)
Spring,相信每个Java开发都用过,而且是每天都在用,那强大又神秘的IoC,AOP,让我们的开发变得越来越简单,只需要一个注解搞定一切,但是它内部到底是什么样子的呢?跟着我,一起探究Spring ...
- spring mybatis 整合jar 包冲突问题
使用mybatis3.1.1+spring3.2.0+spring-mybatis+1.3.0(或者1.1.1)在 使用<bean class="org.mybatis.spring. ...
- Spring第一讲:初步了解Spring
一.什么是Spring,什么是bean? Spring是一种框架,Spring框架主要提供了IoC容器.AOP.数据访问.Web开发.消息.测试等相关技术的支持.每一个没Spring管理的 Java对 ...
- spring boot源码分析之SpringApplication
spring boot提供了sample程序,学习spring boot之前先跑一个最简单的示例: /** Copyright 2012-2016 the original author or aut ...
最新文章
- 论文:贝叶斯优化算法和应用综述(2)--概率模型和采集函数的介绍以及综述列表
- python语言程序设计基础网课-Python语言程序设计基础答案
- 谷歌搜索没有相机图标_谷歌Pixel 2/3a/4 XL中招!更新安卓11相机崩溃
- 【干货】嘿,产品经理 ,这些技术是一定要懂的
- 如何“漂亮”地解决dota类游戏网络延迟同步?
- 为什么手机游戏手柄没有流行起来?
- Java中Map, List, Set和Queue的区别和使用场景
- xuperchain 事件订阅 判断交易是否上链 交易状态
- android studio moudel,Android Studio中Project和Module的关系
- 计算机专业英语张强华答案,计算机专业英语答案
- PHP字符串函数ucfirst( 将字符串的首字母转换为大写)
- 299美元企业级账号申请过程
- 全球首次!32岁青年科学今天发现!道翰天琼认知智能机器人平台API接口大脑为您揭秘。
- CVE20190708复现
- 阿里巴巴 淘特技术部 内推
- 数据平台建设的痛点,如何进行元数据治理?
- 中国污水源热泵运行现状分析与投资策略报告2022-2027年
- linux版_百度输入法Linux版发布 | 欧侃在线“统一源”提供直接安装
- 激光打印机常见加粉问题与使用技巧
- 【微信读书】 《乔布斯传》Walter Isaacson 读书笔记