使用 @EnableXXX 注解实现组件开关
| Java
评论 0 | 点赞 0 | 浏览 252

在做一些公共组件的时候,有时候希望能给自己做的组件加一个开关,通过开关控制是否把这部分功能引入进来,实现的办法有很多,这里介绍注解的方式。

在spring中有很多类似 @EnableXXX 形式的注解,这个注解的作用其实类似开关,最常用的就是 @EnableConfigurationProperties 注解了,我们看一下这个注解的源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({EnableConfigurationPropertiesRegistrar.class})
public @interface EnableConfigurationProperties {
    String VALIDATOR_BEAN_NAME = "configurationPropertiesValidator";

    Class<?>[] value() default {};
}

划重点,源码中有个 @Import 注解,这个注解的作用类似 @Bean 注解,作用就是把一个类作为 bean 注册到容器中。

当我们在开发公共组件的时候,定义一个@EnableXXX 注解,把这个组件中需要的 bean 通过 @Import 注解定义,由于springboot默认只扫描启动类所在目录下的 bean,所以当业务方通过maven依赖引入我们的组件时,需要在启动类上添加 @EnableXXX 来决定是否启用组件,如果不加,组件中的bean不会被注册到spring容器中,相关功能也不会生效。

如果使用了这种方式,则可以省去自动装配,不再需要 META-INF/spring.factories 或者 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

本文作者:不是好驴
本文链接:https://www.baddonkey.cn/detail/54
版权声明:原创文章,允许转载,转载请注明出处

高谈阔论

留言列表