玩转SpringBoot用好条件相关注解,开启自...
因为Spring的核心是基于bean的,所以这些条件注解主要是影响bean的注册。
因为注册的bean不同了,最后对外呈现的行为就不同了。不就是自动配置了。
一、最常用的应该是@Profile注解了
根据不同的环境可以注册不同的bean,如下图01:
然后,激活一下prod环境,在IDE里设置一下,如下图03:
SpringBoot内置了一些注解,如下图05:
二、@ConditionalOnProperty注解
这个注解用于检测Environment中的指定属性是否存在或等于某个指定的值。
如下图06:
matchIfMissing属性就是说,如果没有发现这个属性,算不算匹配上,设置为true就算,false就不算,默认为不算。
请看配置文件,如下图07:
三、@ConditionalOnClass注解
这个注解用于检测类路径里是否包含某个类,其实就是确定是否引入了指定的依赖。
如下图09:
四、@ConditionalOnBean注解
这个注解用于检测容器中是否包含指定的bean。如下图11:
还可以使用注解指定是否包含标有该注解的bean。
示例中是通过Class<?>来指定的,而且指定的是之前注册过的bean,所以一定能匹配上。
执行结果如下图12:
五、@ConditionalOnSingleCandidate注解
这个注解用于检测容器中能够匹配上的候选bean是否只有一个。
只有一个是什么意思呢?就是某个类只注册了一次,这时就是只有一个。比如Boss类。
但是员工可以有多个,所以就会有多个Staff类被注册。此时就不满足条件了。
如果此时还想满足的话,就必须在其中一个Staff类注册时标上@Primary注解。
如下图13:
执行结果如下图14:
这个注解用于检测类路径中是否包含指定的资源。一般也就是文件了。
我们来检测下配置文件,如下图15:
自定义条件注解
需要实现一个条件接口,如下图17:
方法的第一个参数,是一个上下文,如下图18:
方法的第二个参数,是最终标有我们定义好的条件注解的那个类,这个一定要明白。
我们来定义两个和操作系统对应的注解,一个用于Windows,一个用于Linux。
Windows版本的实现,如下图19:
Linux版本的实现,如下图20:
再定义两个注解,分别和这两个条件实现类关联起来。
Windows版本的,如下图21
执行结果如下图24:
最新文章
- JavaScript-在当前显示区范围内实现点不到的小方块
- bochs上网及配置
- python入门学习课程推荐
- Centos6.4安装erlang并配置mysql数据库
- ios企业应用发布流程
- 【摘要】多线程 - BeginInvoke异步调用
- TinyHttpd中sockaddr与struct sockaddr_in的区别
- 实施费用也能DIY--走出软件作坊:三五个人十来条枪 如何成为开发正规军(九)[转]
- arcgis for android访问arcgis server上自己制作部署的地图服务
- 转:FIFO和DMA
- 10-利用com组件读取office
- Bootstrap风格登录界面设计样例
- python 中如何导入一个自己创建的模块
- Android中JNI编程详解
- springboot~Money类型在序列化时遇到的问题与解决
- mysql 删除重复数据
- python 发送163邮件
- TNS-12560,TNS-00583: Valid node checking: unable to parse configuration parameters
- http post 请求详解
- odoo学习之带出信息