@EnableAutoConfiguration
1.该注解包含了@AutoConfigurationPackage注解;
2.@EnableAutoConfiguration注解,使Springboot可以自动配置,
可以找到主配置类@SpringBootApplication所在类的包,将该包和所有的子包全部纳入Spring容器;
传统的应用需要手动将类所在包(控制器)手工写入scan扫描器中(加入spring容器),springboot不需要手动配置;
3.springboot项目中
a.自己写的代码;
b.引入的第三方依赖
通过AutoConfigurationImportSelector类中selectImports()方法引入第三方依赖;
Springboot启动是会根据 META-INF/spring-autoconfigure-metadata.properties找到三方依赖并这些依赖引入本项目;
META-INF/spring.factories
Spring-boot-autoconfigure-2.1.3.RELEASE.jar-->META-INF/spring.factorie
@EnableAutoConfiguration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
@AutoConfigurationPackage
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({Registrar.class})
public @interface AutoConfigurationPackage {
}
selectImports()
public String[] selectImports(AnnotationMetadata annotationMetadata) {
if (!this.isEnabled(annotationMetadata)) {
return NO_IMPORTS;
} else {
AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);
AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);
return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
}
}
public static AutoConfigurationMetadata loadMetadata(ClassLoader classLoader) {
return loadMetadata(classLoader, "META-INF/spring-autoconfigure-metadata.properties");
}
4.总结:
传统的项目中一般会对自己的写得代码以及第三方依赖进行配置,
在springboot中可以自动配置,不需要我们自己配置;
a.自己写的代码(Controller)通过Sprinboot通过@EnableAutoConfiguration帮我们自动配置;
b.第三方依赖通过Spring-boot-autoconfigure-2.1.3.RELEASE.jar-->META-INF/spring.factories进行申明,
然后通过@EnableAutoConfiguration开启使用;
c.Spring-boot-autoconfigure-2.1.3.RELEASE.jar包中包含了J2EE整合体系中需要的依赖;