当前位置: 首页 > news >正文

SpringBoot --条件注解与属性绑定

1. 条件注解

如果注解指定的条件成立,则触发指定行为。在前文介绍自动配置机制时,也可以看到在SpringBoot的源码中使用了该注解。

常用的条件注解主要有以下四个:

  • @ConditionalOnClass:如果类路径中存在这个类,则触发指定行为
  • @ConditionalOnMissingClass:如果类路径中不存在这个类,则触发指定行为
  • @ConditionalOnBean:如果容器中存在这个Bean(组件),则触发指定行为
  • @ConditionalOnMissingBean:如果容器中不存在这个Bean(组件),则触发指定行为

在注解中,也可以设置属性值来完善判断条件。例如:@ConditionalOnBean(value=组件类型,name=组件名字):判断容器中是否有这个类型的组件,并且名字是指定的值。

2. 属性绑定

与条件注解类似,在自动配置机制中,SpringBoot也使用到了相关注解。这里就对属性绑定进行介绍。

@ConfigurationProperties注解可以声明组件的属性和配置文件哪些前缀开始项进行绑定。假如我们自己定义了一个配置类,需要获取到配置文件中指定前缀下的配置值,那么我们就可以在配置类上声明该注解,并在注解中指定配置前缀,配置类中的属性值就会与配置文件中大哥配置一一绑定。

由于SpringBoot 默认只扫描自己主程序所在的包,如果导入第三方包,即使组件上标注了 @Component@ConfigurationProperties 注解也没用,因为组件扫描不到。那么,如果要使第三方包的属性绑定生效,我们该怎么做呢?

可以使用@EnableConfigurationProperties快速注册注解,在注解中声明第三方包中属性绑定的属性类,这样该属性类就可以和配置文件进行绑定。

总结

  • 如果我们要将容器中自己编写的任意组件(Bean)的属性值和配置文件的配置项的值进行绑定:
    • 给容器中注册组件(@Component、@Bean)
    • 使用@ConfigurationProperties 声明组件和配置文件的哪些配置项进行绑定
  • 如果我们要激活第三方包的属性绑定(第三方已经使用@ConfigurationProperties 声明组件和配置文件的哪些配置项进行绑定):
    • 使用@EnableConfigurationProperties

相关文章:

  • Contos7 安装 Maven
  • sqlite3的安装
  • 前端Ajax请求从后端获取二进制文件并下载
  • STM32学习笔记(9_2)- USART串口外设
  • qt学习第三天,qt设计师的第一个简单案例
  • JVM(一)——内存结构
  • 实验十 枚举问题(过程模拟)
  • 正则表达式 vs. 字符串处理:解析优势与劣势
  • [linux][调度] 内核抢占入门 —— 高优先级线程被唤醒时会立即抢占当前线程吗 ?
  • PCM /G711音频播放器 :Audacity
  • js 分割号查找内容
  • Unity 镜头动画
  • Rust 实战练习 - 8. 内存,ASM,外挂 【重磅】
  • HJ73 计算日期到天数转换
  • 为什么要使用注意力机制?
  • $translatePartialLoader加载失败及解决方式
  • Android 控件背景颜色处理
  • Angular4 模板式表单用法以及验证
  • CSS魔法堂:Absolute Positioning就这个样
  • Effective Java 笔记(一)
  • ES6之路之模块详解
  • extjs4学习之配置
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Spark学习笔记之相关记录
  • Vue全家桶实现一个Web App
  • 浮动相关
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 经典排序算法及其 Java 实现
  • 最简单的无缝轮播
  • 《码出高效》学习笔记与书中错误记录
  • Java性能优化之JVM GC(垃圾回收机制)
  • Spring第一个helloWorld
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • $(selector).each()和$.each()的区别
  • (1)常见O(n^2)排序算法解析
  • (4)Elastix图像配准:3D图像
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (MATLAB)第五章-矩阵运算
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (汇总)os模块以及shutil模块对文件的操作
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (实战篇)如何缓存数据
  • (译)计算距离、方位和更多经纬度之间的点
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)ORM
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .net 受管制代码
  • .NET程序员迈向卓越的必由之路
  • .net访问oracle数据库性能问题
  • [1525]字符统计2 (哈希)SDUT
  • [AIGC] MySQL存储引擎详解