@ConditionalOnProperty的作用和用法

@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

posted on 2022-09-29 15:30  大山008  阅读(3436)  评论(0)    收藏  举报