一、代码说明
springboot启动类中一般会附加注解:@SpringBootApplication
,代码如下:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.boot.autoconfigure;
...
@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
将启动类转化为一个spring配置类,相当于@Configuration
@ComponentScan
自动扫描并加载符合条件的组件或 bean 定义@EnableAutoConfiguration
开启自动配置二、注解作用
帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot,并创建对应配置类的Bean,并把该Bean实体交给IoC容器进行管理。
并且会从依赖包的classpath中搜索所有META-INF/spring.factories配置文件,然后将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
反斜杠后对应的配置项加载到spring容器。
例如:
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration
注意:只有spring.boot.enableautoconfiguration为true(默认为true)的时候,才启用自动配置
三、扫描规则
默认会扫描与项目启动类同级或者更低级目录下的所有使用@Configuration注解的类。
如果需要排除某些符合条件的类,则使用exclude
:
@EnableAutoConfiguration(exclude = {
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
四、注意事项
如果服务启动时报错某个类注入失败,可能是启动类目录级别有误,无法扫描到某些依赖中自动注入的类。