@ConditionalOnProperty的作用和用法
在spring boot中有时候需要控制配置类是否生效,可以使用@ConditionalOnProperty注解来控制@Configuration是否生效.
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) @Documented @Conditional({OnPropertyCondition.class}) public @interface ConditionalOnProperty { // NAME和VALUE的互为别名,在使用时是互斥的 String[] value() default {}; String[] name() default {}; // 配置项前缀,如果完整配置为:servicex.swagger.config.enabled,则prefix为:servicex.swagger.config String prefix() default ""; // 用havingValue与配置项的值进行对比,一致返回TRUE,不一致返回FALSE. String havingValue() default ""; // 如果配置文件中, 没有该配置项, 判断是否加载BEAN, 默认为false。 boolean matchIfMissing() default false; }
注解说明
A. 这些注解都可以应用在 TYPE 上,也就是说,Spring 自动扫描的一切类 (@Configuration, @Component, @Service, @Repository, @Controller) 都可以通过添加相应的 @ConditionalOnXxxx 来判断是否加载;
B. 这些注解都可以应用在 METHOD 上,所以有 @Bean 标记的方法也可以应用这些注解;
C. 都使用了 @Conditional 注解来标记,OnBeanCondition 等自定义 Condition 也是实现了 Condition 接口。
配置文件
# 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/*,/app/*,/shop/*
配置代码
@Bean @ConditionalOnProperty(value = "xss.enabled", havingValue = "true") public FilterRegistrationBean xssFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setDispatcherTypes(DispatcherType.REQUEST); registration.setFilter(new XssFilter()); registration.addUrlPatterns(StringUtils.split(urlPatterns, ",")); registration.setName("xssFilter"); registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE); Map<String, String> initParameters = new HashMap<String, String>(); initParameters.put("excludes", excludes); registration.setInitParameters(initParameters); return registration; }
参考 :https://blog.csdn.net/goodjava2007/article/details/122877091?spm=1001.2014.3001.5502
https://blog.csdn.net/goodjava2007/article/details/125536719
标签:String,default,ConditionalOnProperty,用法,FilterRegistrationBean,registration,注解,作 From: https://www.cnblogs.com/person008/p/16741766.html