一、代码说明
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 Configureorg.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})
四、注意事项
如果服务启动时报错某个类注入失败,可能是启动类目录级别有误,无法扫描到某些依赖中自动注入的类。

