别看Spring现在玩的这么花,其实它的“筹码”就两个,“容器”和“bean定义”。
只有先把bean定义注册到容器里,后续的一切可能才有可能成为可能。
所以在进阶的路上如果要想走的顺畅些,彻底搞清楚bean定义注册的所有细节至关重要。
毕竟这是万里长征的第一步。有句话怎么说来着,“勿在浮沙筑高台”。
Spring步入注解和Java配置的时代也有些时日了。而且也旗帜鲜明的表达了bean的注册方法。
这不,就是这个接口,AnnotationConfigRegistry,如下图01:
再来看下这个接口的名字,有三个单词组成,Annotation、Config、Registry。
第一个表示注解,第二个表示Java配置,第三个表示注册。
合起来的意思可以理解为,基于注解和Java配置的bean定义注册。当然,这是我猜的,哈哈哈。
这是一个很牛X的接口,理由见下图02:
纳尼,所有的容器类都实现了它。
不管是web的、非web的,传统Spring的、SpringBoot的,响应式的、Servlet的。
简直是老少通吃、妇孺皆宜啊。淡定、淡定。
这个接口的两个方法非常简约:
一个是直接把一个类(Class>)进行注册。
一个是通过扫描指定的包(Package)里的类进行注册。
请注意我刚刚使用了“简约”而没有使用“简单”,因为简约往往并不等于简单,反而更多时候等于难。
讲了这么多,终于可以让今天的主角登场了,来来来,掌声响起来。
就是这两个类:
AnnotatedBeanDefinitionReader
ClassPathBeanDefinitionScanner
第一个类就是