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 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号