EnableAutoConfiguration注解简介说明
下文笔者将讲述EnableAutoConfiguration注解的简介说明,如下所示:
EnableAutoConfiguration是SpringBoot的一个特性 可根据classpath中的jar依赖 自动注册bean,一般用于类或接口上 它尝试根据您添加的jar依赖项自动配置Spring应用程序。
EnableAutoConfiguration注解的源码
@Target(ElementType.TYPE) @Retention(RetentionPolicy.Runtime) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class[] exclude() default {}; String[] excludeName() default {}; } @EnableAutoConfiguration实现的关键在于引入了AutoConfigurationImportSelector 其核心逻辑为selectImports方法 借助AutoConfigurationImportSelector 它可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。
EnableAutoConfiguration注解的原理
当springboot扫描到@EnableAutoConfiguration注解时则会将spring-boot-autoconfigure.jar/META-INF/spring.factories文件 中org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的value里的所有xxxConfiguration类加载到IOC容器中 spring.factories文件里每一个xxxAutoConfiguration文件一般都会有下面的条件注解:
@ConditionalOnClass : classpath中存在该类时起效 @ConditionalOnMissingClass : classpath中不存在该类时起效 @ConditionalOnBean : DI容器中存在该类型Bean时起效 @ConditionalOnMissingBean : DI容器中不存在该类型Bean时起效 @ConditionalOnSingleCandidate : DI容器中该类型Bean只有一个或@Primary的只有一个时起效 @ConditionalOnExpression : SpEL表达式结果为true时 @ConditionalOnProperty : 参数设置或者值一致时起效 @ConditionalOnResource : 指定的文件存在时起效 @ConditionalOnJndi : 指定的JNDI存在时起效 @ConditionalOnJava : 指定的Java版本存在时起效 @ConditionalOnWebApplication : Web应用环境下起效 @ConditionalOnNotWebApplication : 非Web应用环境下起效
SpringBoot中EnableAutoConfiguration实现的关键在于引入了AutoConfigurationImportSelector,其核心逻辑为selectImports方法 如下: 1.从配置文件META-INF/spring.factories加载所有可能用到的自动配置类; 2.去重,并将exclude和excludeName属性携带的类排除; 3.过滤,将满足条件(@Conditional)的自动配置类返回;
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。