SpringBoot自动化配置原理

image

Spring Boot项目中有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan其中

@EnableAutoConfiguration是实现自动化配置的核心注解。

该注解的源码如下所示:

Import :

直接把一个类导入Spring容器中,这个特点最重要,返回值是一个数组,键是EnableAutoConfiguration,值是里面的每个Bean

@Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { 该注解通过@Import注解导入AutoConfigurationImportSelector,这个类实现了一个导入器接口ImportSelector。

在该接口中存在一个方法selectImports,如下所示:

@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容器中。

范骏博客
请先登录后发表评论
  • latest comments
  • 总共0条评论