SpringBoot的自动加载
@SpringBootApplication
我们在SpringBoot的启动类(xxxApplication.class)上面可以看到注解 @SpringBootApplication ;
该注解表示这是一个SpringBootApplication的应用启动类的入口.类似于Java的main()方法。
进到 SpringBootApplication 注解内部。
package org.springframework.boot.autoconfigure;
import ...
@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 @EnableAutoConfiguration @ComponentScan 这三个比较不一样的注解。
@SpringBootConfiguration
进到 SpringBootConfiguration注解内部。
package org.springframework.boot;
import ...
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
...
}
在这里我们可以看到 @Configuration 这个注解。
其作用时告诉SpringBoot:SpringBootConfiguration 是一个配置类文件。
所以 @SpringBootConfiguration 作用同样时告诉SpringBoot:SpringBootApplication 是一个配置类文件。
@EnableAutoConfiguration
进到 EnableAutoConfiguration 注解内部。
通过类的名字我们可以知道这是开启自动配置的注解。
package org.springframework.boot.autoconfigure;
import ...
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
...