在Spring Boot
项目中有一个注解@SpringBootApplication
,这个注解是对三个注解进行了封装:@SpringBootConfiguration
、@EnableAutoConfiguration
、@ComponentScan
其中
@EnableAutoConfiguration
是实现自动化配置的核心注解。
直接把一个类导入Spring
容器中,这个特点最重要,返回值是一个数组,键是EnableAutoConfiguration
,值是里面的每个Bean
@Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { 该注解通过@Import注解导入AutoConfigurationImportSelector,这个类实现了一个导入器接口ImportSelector。
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
if (!isEnabled(annotationMetadata)) {
return NO_IMPORTS;
}
AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(annotationMetadata);
return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
}
该方法的返回值是一个数组,数组中存储的就是要被导入到spring容器中的类的全类名。
在AutoConfigurationImportSelector
类中重写了这个方法,该方法内部就是读取了项目的classpath
路径下META-INF/spring.factories
文件中的所配置的类的全类名。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.itheima.service.impl.MinIOFileStorageService
在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。
总结:在项目启动的时候,spring boot
框架会自动读取META-INF/spring.factories配置文件中
org.springframework.boot.autoconfigure.EnableAutoConfiguration
所配置的配置类,然
后将其中所定义的bean根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。
本文为范骏原创文章,转载无需和我联系,但请注明来自范骏博客https://fjun.org
最新评论