Java面试题:Spring Boot 的 @EnableAutoConfiguration 注解的作用,以及与 @SpringBootApplication 注解的关系?

本文将介绍 Spring Boot 的 @EnableAutoConfiguration 注解的作用,以及与 @SpringBootApplication 注解的关系?

@EnableAutoConfiguration 的作用

@EnableAutoConfiguration 的作用是开启自动配置。它可以帮助 Spring Boot 应用将所有符合条件的 @Configuration 配置都加载到当前 Spring Boot 创建并使用的 IoC 容器。源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

   String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

   /**
    * Exclude specific auto-configuration classes such that they will never be applied.
    * @return the classes to exclude
    */
   Class<?>[] exclude() default {};

   /**
    * Exclude specific auto-configuration class names such that they will never be
    * applied.
    * @return the class names to exclude
    * @since 1.3.0
    */
   String[] excludeName() default {};

}

其中:

  • exclude  排除特定的自动配置类,使其永远不会被应用。

  • excludeName  排除特定的自动配置类名,使其永远不会被应用。

例如:Spring Boot 启动加载时排除数据库加载操作,如下:

@EnableAutoConfiguration(exclude={
        DataSourceAutoConfiguration.class,
        HibernateJpaAutoConfiguration.class
})
@RestController
@SpringBootApplication
public class HelloWorldApplication {
    //...
}

@EnableAutoConfiguration 与 @SpringBootApplication 的关系

@SpringBootApplication 注解包含 @EnableAutoConfiguration 注解,源码如下:

@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 {
    //...
}

从上面源码可以得知,@SpringBootApplication 注解源码上已经声明了 @EnableAutoConfiguration 注解。

天赋如同自然花木,要用学习来修剪。 —— 培根
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号