首页 > 其他分享 >@ConditionalOnProperty的作用和用法

@ConditionalOnProperty的作用和用法

时间:2022-09-29 15:33:42浏览次数:79  
标签:String default ConditionalOnProperty 用法 FilterRegistrationBean registration 注解 

@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

相关文章

  • js作用域的理解
    一、变量作用域解析过程​​对于s​​​​cript脚本中的变量:自上而下全局变量、全局函数​​​​对于函数中的变量:由里到外​​​​浏览器解析变量过程:​​​​“JS解析器......
  • 3款大屏播放软件,用法很详细,用于大屏幕播放视频和图片
    要在展厅或户外的LED大屏幕上长时间循环播放视频或图片,就需要用到大屏播放软件,笔者整理几款好用的给大家。一、动屏大屏播放软件特点这款软件的特点是配置简单,界面美观,即插......
  • base64格式在Html中的用法
     Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 图片data:image/gif;base64,base64编码的gi......
  • 67-@RequestParam、@PathVariable、@RequestBody、@ModelAttribute的用法
    @RestController@RequestMapping("/sys-user")publicclassSysUserController{@AutowiredprivateISysUserServicesysUserService;@PostMapping("/get......
  • JS - 初识作用域
    作用域2022-09-29----------------全局作用域:函数之外声明的变量局部作用域:代码块里变量定义的位置-函数内外 - ES2015let:重新声明变量1{2le......
  • 结构赋值的高阶用法
    结构赋值的高阶用法结构赋值对于引用嵌套的属性或目标没有限制。为此,可以通过结构来复制对象属性。letobj1={a:1,b:2,c:3};letobj2={};({a:obj......
  • CSS中Cellpadding和 Cellspacing用法和定义
    https://www.cnblogs.com/LiuSiLence/p/9023293.htmlCellspacing,属性表示两个单元格之间的距离cellpadding,是补白,是指单元格内文字与边框的距离。 ......
  • ERP 系统的核心是什么?有什么作用?
    ERP系统的核心就是系统的内部业务逻辑,这也是ERP复杂、专业性的体现!ERP系统需要适配企业的管理思想和业务流程,在技术上面也也要做到快速部署和个性化定制(客户化定制),而这些企......
  • highlight.js代码高亮脚本的基本用法
    一、准备highlight.js官网下载界面中文文档点击Getversion进行下载勾选语言进行下载下载好的文件结构二、引入highlight的CSS样式和js文件引......
  • Python3 range() 函数用法
    Python3range()函数返回的是一个可迭代对象(类型是对象),而不是列表类型,所以打印的时候不会打印列表。Python3list()函数是对象迭代器,可以把range()返回的可迭代对象转为......