笨办法学习@ConditionalOnProperty 烧脑配置记录
前言
今天继续学习springboot时,一不小心就被@ConditionalOnProperty注解的配置真假搞得我真的变得真真假假了。。(此为真,彼为假,到底你是真还是你是假,晕了晕了。。。)
本片主要记录一下注解的真假情况
源码
emmmm 先简单的翻译一下源码. 看每一个属性是什么含义.
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {/*** name的别名* Alias for {@link #name()}.* @return the names*/String[] value() default {};/*** 应用于每个属性的前缀.如果前缀没有指定则以点结尾.一个有效的前 * 缀由一个或者多个用点分隔的单词组成(例: acme.system.feature)* A prefix that should be applied to each property. The prefix automatically ends* with a dot if not specified. A valid prefix is defined by one or more words* separated with dots (e.g. {@code "acme.system.feature"}).* @return the prefix*/String prefix() default "";/*** 需要验证的属性名, 如果一个前缀已经定义,则将其应用于一个完整的键* 例如: 前缀app.config, 属性为: my-value, 则完整的键是app.config.my-value* The name of the properties to test. If a prefix has been defined, it is applied to* compute the full key of each property. For instance if the prefix is* {@code app.config} and one value is {@code my-value}, the full key would be* {@code app.config.my-value}* <p>* 使用虚线符来指定每个属性, 即全部小写, 并用"-"分割单词, 例如my-long-property* Use the dashed notation to specify each property, that is all lower case with a "-"* to separate words (e.g. {@code my-long-property}).* @return the names*/String[] name() default {};/*** 属性的预期值, 如果未指定则改属性必须不等于false* The string representation of the expected value for the properties. If not* specified, the property must <strong>not</strong> be equal to {@code false}.* @return the expected value*/String havingValue() default "";/*** 如果未指定属性, 则指定属性是否应匹配. 默认为false* Specify if the condition should match if the property is not set. Defaults to* {@code false}.* @return if should match if the property is missing*/boolean matchIfMissing() default false;}
验证
1、指定前缀及属性,但配置文件中不配置属性时
可以看到项目正常启动,没有进入创建User实例的方法
2、指定前缀及属性,配置文件中配置属性,但不指定havingValue值时
可以看到项目正常启动,并且进入了创建User实例的方法,因为havingValue默认为 “” 字符,并且指定属性后未在注解中指定havingValue,则与默认值进行比对,比对为真。
3、指定前缀及属性,配置文件中配置属性值,指定havingValue值
havingValue与属性值不同时:
havingValue与属性值相同时:
从上面看出,当havingValue配置的期望值与配置文件中的值相同则为真,反之则为假。为真时执行实例化方法,为假则不执行。
4、指定matchIfMissing时
matchIfMissing = true时
matchIfMissing = false时
可以看出来,当matchIfMissing为true时,不配置属性也会正常实例化bean。如果属性不指定,matchIfMissing指定为true匹配该属性是否进行匹配。当属性指定,且matchIfMissing也为true时,属性还是根据原有的规则进行校验。
反之: 如果matchIfMissing为true,不配置属性时,便不会实例化bean,相当于默认开启了属性校验。
结论
- 通过根据逻辑配置@ConditionalOnProperty注解的属性,来检查bean是否应该创建,将bean管理变为可插拔式。合理利用Conditional注解,能够使代码更加灵活。
- _ ~ 加油新的学习还在继续…
笨办法学习@ConditionalOnProperty 烧脑配置记录相关推荐
- 笨办法学习python 学习笔记习题26
笨办法学习python 学习笔记习题26 修改后如下: print("你多大了?", end=' ') age = input() print("你多高?", ...
- 笨办法学习python应该看第几版_笨办法学习python
天陆续收到很多读者.球友的留言.私信,说要怎么学Python?有没有基础的,偏小白的学习方法?我的回答是:等我统一答复. 小胖从不食言,今天就来说说我觉得一个零基础.想转行.一直不得法的人应该如何入门 ...
- 笨办法学习python应该看第几版_求问:完全小白学习Python看《笨方法学Python3》还是看《Python编程从入门到实践》?...
完全小白,建议看 <Python编程从入门到实践> 或 <像计算机科学家一样思考Python 第2版> 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程.贯 ...
- 笨办法学python3 x_笨办法学习Python3.x 习题17
原博文 2018-07-08 22:47 − 1 from sys import argv 2 from os.path import exists 3 4 script, from_file, to ...
- 笨办法学习python3 ex3
习题3 认识代码块中数学运算,以及布尔值 print("I will now count my chickens:")print("Hens", 25 + 30 ...
- 笨办法学python3_月底送书!入门Python都在学的“笨办法”,出进阶篇了!
你们知道吗?每10个将Python作为自己的入门语言的程序员里,就有8个是读着<"笨办法"学Python>的书成长的!这位拥有近20年的编程和写作经验的IT书籍作家-- ...
- 框架写mysql插入为空_学习springMVC框架配置遇到的问题-数据写入不进数据库时的处理办法...
Idea简单SpringMVC框架配置 前边已经介绍过了Struts在Idea上的配置,相对于Struts来说,我觉得SpringMVC有更多的优势,首先Struts是需要对action进行配置,页面 ...
- “笨方法”学习Python笔记(1)-Windows下的准备
Python入门书籍 来自于开源中国微信公众号推荐的一篇文章 全民Python时代,豆瓣高级工程师告诉你 Python 怎么学 问:请问你目前最好的入门书是那本?有没有和PHP或者其他语言对比讲Pyt ...
- fedora23安装配置记录
一.安装fedora 1.下载fedora的镜像文件,个人比较喜欢gnome,因而直接下载工作站版本了! http://start.fedoraproject.org/这个是浏览器首页,提供了fedo ...
最新文章
- PCL_common模块api代码解析
- mysql数据库互联网连接_myeclipse怎么连接mysql数据库?(详细步骤)
- Redis学习-String
- java resume过时方法_学点开发|关于Java多线程用法解析
- IDEA在jsp页面写out.print()代码报错
- mybatis写当天 当月的数据 时间段数据https://www.cnblogs.com/xzjf/p/7600533.html
- 重新上课,学习HTML的第一天
- LiveVideoStackCon深圳-透过业务看QoE
- c语言编译器怎么用scanfkl,C语言一些笔记
- [Bugku][Web][CTF] 16-29 write up
- SkyEye图形化界面使用技巧篇(一)
- python cnn代码详解 keras_python – CNN返回相同的分类结果(keras)
- 汽车辐射监测系统-Qt开发
- 第二阶段冲刺第六天站立会议
- 【原创】【android逆向系列】1:真机(小米note 3)root(从本人简书博客移入)
- 亚马逊美国站UL2849电动自行车标准测试报告
- php获取应用宝app下载连接
- 任何经历,都是一种积累
- 2014 android 新技术,向友商学习 Android 12新功能前瞻:似曾相识
- 【原创】随手记下-电脑版微信双开