Spring boot 注解原理分析(@EnableAutoConfiguration深入理解) 下
作者:互联网
一、项目结构:
二、@EnableAutoConfiguration原理分析:
@EnableAutoConfiguration到底是怎么启用一些特性的?
(1)、首先要知道这个接口是干嘛的,ImportSelector
ImportSelector接口有一个抽象方法,String[] selectImports(AnnotationMetadata var1);
这个方法会返回一个字符串数组,这个字符串数组里面是一些类的路径加名称,返回之后,这些类会装配到Spring容器里面。
(2)、我们点进去@EnableAutoConfiguration注解,看看到底有些什么东西,如下图:
可以看到 这个注解实际上是一个借口,导入了AutoConfigurationImportSelector.class,
这个类是关键所在,还有Class<?>[] exclude() default {};和String[] excludeName() default {};
这两个属性是用来排除装配的bean的(设置这两个属性,按class或者名称),装配bean的时候会排除掉这两个属性里面设置的bean。
(3)、再点进去AutoConfigurationImportSelector.class,这个class是自动装配bean的最关键的class,看看到底有些什么东西,如下图:
可以看到这个类实现了DeferredImportSelector,DeferredImportSelector又继承了ImportSelector接口,所以可以装配bean。
再看这个方法selectImports,这个是用来根据配置文件(META-INF/spring.factories)返回一个字符串数组,
然后将这个数组里面的bean装配到Spring容器里面去。
我们再看一下这个方法this.getCandidateConfigurations(annotationMetadata, attributes);
说明配置文件是需要读取classPath下的META-INF/spring.factories
(4)、META-INF/spring.factories应该怎样配置:
org.springframework.boot.autoconfigure.EnableAutoConfiguration是key
com.miller.core.EnableAutoUserConfiguration,com.miller.core.Role是值
读取key对应的值,返回这个值的字符串数组,
通过ImportSelector接口的String[] selectImports(AnnotationMetadata var1);方法,
将这些值装配到Spring容器中。
以上就是基本原理,就是为什么@EnableAutoConfiguration启用Spring的一些特性
(其实说白了,就是通过外部的Jar包或者ClassPath中的Class装配一些bean到Spring容器里面,在Spring容器里面就会起作用)
标签:装配,Spring,boot,ImportSelector,bean,EnableAutoConfiguration,class 来源: https://blog.csdn.net/qq_39188150/article/details/99696475