@Conditional
在spring boot中有时候需要控制配置类是否生效,可以使用@ConditionalOnProperty注解来控制@Configuration是否生效.
@Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.METHOD }) @Documented @Conditional(OnPropertyCondition.class) public @interface ConditionalOnProperty { //name的别名,和value不可同时使用 String[] value() default {}; /**配置项的前缀,例如完整的配置是config.person.enable=true * 那 prefix=“config.person” */ String prefix() default ""; /** 配置项的属性,例如完整的配置是config.person.enable=true 在前面已经设置 prefix=“config.person” 那么 name=“enable”; 如果prefix没有设置,那么name可以是整个配置项,例如下面: name=“config.person.enable”,效果和上面的一样 */ String[] name() default {}; /** * 会将配置文件中的值和havingValue的值对比,如果一样则加载Bean,例如: * * config.person.enable=true,havingValue=“true”,加载Bean * * config.person.enable=false,havingValue=“false”,加载Bean * * config.person.enable=ok,havingValue=“ok”,加载Bean * * config.person.enable=false,havingValue=“true”,不加载Bean * * config.person.enable=ok,havingValue=“no”,不加载Bean * * 当然havingValue也可以不设置,只要配置项的值不是false或“false”,都加载Bean,例如: * * config.person.enable=ok,不设置havingValue,加载Bean * * config.person.enable=false,不设置havingValue,不加载Bean */ String havingValue() default ""; /** * 如果在配置文件中没有该配置项,是否加载Bean */ boolean matchIfMissing() default false; }
Nice to see you all!