博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring-ClassPathBeanDefinitionScanner
阅读量:4303 次
发布时间:2019-05-27

本文共 1399 字,大约阅读时间需要 4 分钟。

扫描指定目录下的带有@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方法

转载地址:http://bxhws.baihongyu.com/

你可能感兴趣的文章
《剑指offer》连续子数组的最大和
查看>>
CAD 快捷键Ctrl+2 Ctrl+3
查看>>
SU Demos-06Selecting Traces
查看>>
谈谈__proto__和prototype的区别
查看>>
中正平和的出处
查看>>
结对作业(返回一个整数数组中最大子数组的和——数组首尾相接)
查看>>
个人总结
查看>>
iOS 时间选择器禁止选取系统时间之前的时间
查看>>
SQL Server 异常处理机制(Begin try Begin Catch) 摘录
查看>>
二:HTML文本编译器 kindeditor-4.1.10 的使用 SpringMVC+jsp的实现
查看>>
you-get视频下载
查看>>
java实际项目中interface和abstract interface 区别
查看>>
设置checkBox不拦截焦点
查看>>
C#使用xml文档作为数据源 Name cannot begin with the ' ' character, hexadecimal value 0x20
查看>>
enctype="multipart/form-data导致request获取不到数据
查看>>
从源码看java线程状态
查看>>
JavaScript中String对象处理HTML标记中文本的方法
查看>>
Blog开通了.
查看>>
istio-1.1.6镜像列表
查看>>
Unity C#笔记 容器类
查看>>