目录
@Import(EnableAutoConfigurationImportSelector.class)
@SpringBootApplication
@SpringBootApplication标注在SpringBoot主配置类上,SpringBoot会运行这个类的main方法来启动Spring Boot应用。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@SpringBootConfiguration
@SpringBootConfiguration标注在SpringBoot配置类上。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
@Configuration标注Spring配置类,配置类也是容器中的一个组件。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
String value() default "";
}
@EnableAutoConfiguration
开启SpringBoot自动控制功能。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationnPackage
将主配置类(@SpringBootApplication标注的类)所在包及下面所有子包里面的所有组件扫描到Spring容器中。
@Import({Registrar.class})
给容器中导入一个组件,导入的组件由Import后面的类决定。
@Import(EnableAutoConfigurationImportSelector.class)
导入哪些组件的选择器。将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中。
会给容器中导入很多的自动配置类(xxxAutoConfiguration),用来给容器中导入这个场景需要的所有组件并配置好这些组件。例如:org.springframework.boot_autoconfigure.aop.AopAutoConfiguration等。
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);
SpringBoot在启动时从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置。
J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar。