image.png

一、代码说明

springboot启动类中一般会附加注解:@SpringBootApplication,代码如下:

  1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by FernFlower decompiler)
  4. //
  5. package org.springframework.boot.autoconfigure;
  6. ...
  7. @Target({ElementType.TYPE})
  8. @Retention(RetentionPolicy.RUNTIME)
  9. @Documented
  10. @Inherited
  11. @SpringBootConfiguration
  12. @EnableAutoConfiguration
  13. @ComponentScan(
  14. excludeFilters = {@Filter(
  15. type = FilterType.CUSTOM,
  16. classes = {TypeExcludeFilter.class}
  17. ), @Filter(
  18. type = FilterType.CUSTOM,
  19. classes = {AutoConfigurationExcludeFilter.class}
  20. )}
  21. )
  22. public @interface SpringBootApplication {
  23. ...
  24. }

相当于同时加了三个注解,分别是:

  • @SpringBootConfiguration 将启动类转化为一个spring配置类,相当于@Configuration
  • @ComponentScan自动扫描并加载符合条件的组件或 bean 定义
  • @EnableAutoConfiguration 开启自动配置

    二、注解作用

    帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot,并创建对应配置类的Bean,并把该Bean实体交给IoC容器进行管理。

并且会从依赖包的classpath中搜索所有META-INF/spring.factories配置文件,然后将其中
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
反斜杠后对应的配置项加载到spring容器。
例如:

  1. # Auto Configure
  2. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  3. org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
  4. org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
  5. org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
  6. org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
  7. org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration


注意:只有spring.boot.enableautoconfiguration为true(默认为true)的时候,才启用自动配置

三、扫描规则

默认会扫描与项目启动类同级或者更低级目录下的所有使用@Configuration注解的类。
如果需要排除某些符合条件的类,则使用exclude

  1. @EnableAutoConfiguration(exclude = {
  2. org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
  3. })

四、注意事项

如果服务启动时报错某个类注入失败,可能是启动类目录级别有误,无法扫描到某些依赖中自动注入的类。


参考资料: 关于@EnableAutoConfiguration注解