前言

今天继续学习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 烧脑配置记录相关推荐

  1. 笨办法学习python 学习笔记习题26

    笨办法学习python 学习笔记习题26 修改后如下: print("你多大了?", end=' ') age = input() print("你多高?", ...

  2. 笨办法学习python应该看第几版_笨办法学习python

    天陆续收到很多读者.球友的留言.私信,说要怎么学Python?有没有基础的,偏小白的学习方法?我的回答是:等我统一答复. 小胖从不食言,今天就来说说我觉得一个零基础.想转行.一直不得法的人应该如何入门 ...

  3. 笨办法学习python应该看第几版_求问:完全小白学习Python看《笨方法学Python3》还是看《Python编程从入门到实践》?...

    完全小白,建议看 <Python编程从入门到实践> 或 <像计算机科学家一样思考Python 第2版> 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程.贯 ...

  4. 笨办法学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 ...

  5. 笨办法学习python3 ex3

    习题3 认识代码块中数学运算,以及布尔值 print("I will now count my chickens:")print("Hens", 25 + 30 ...

  6. 笨办法学python3_月底送书!入门Python都在学的“笨办法”,出进阶篇了!

    你们知道吗?每10个将Python作为自己的入门语言的程序员里,就有8个是读着<"笨办法"学Python>的书成长的!这位拥有近20年的编程和写作经验的IT书籍作家-- ...

  7. 框架写mysql插入为空_学习springMVC框架配置遇到的问题-数据写入不进数据库时的处理办法...

    Idea简单SpringMVC框架配置 前边已经介绍过了Struts在Idea上的配置,相对于Struts来说,我觉得SpringMVC有更多的优势,首先Struts是需要对action进行配置,页面 ...

  8. “笨方法”学习Python笔记(1)-Windows下的准备

    Python入门书籍 来自于开源中国微信公众号推荐的一篇文章 全民Python时代,豆瓣高级工程师告诉你 Python 怎么学 问:请问你目前最好的入门书是那本?有没有和PHP或者其他语言对比讲Pyt ...

  9. fedora23安装配置记录

    一.安装fedora 1.下载fedora的镜像文件,个人比较喜欢gnome,因而直接下载工作站版本了! http://start.fedoraproject.org/这个是浏览器首页,提供了fedo ...

最新文章

  1. PCL_common模块api代码解析
  2. mysql数据库互联网连接_myeclipse怎么连接mysql数据库?(详细步骤)
  3. Redis学习-String
  4. java resume过时方法_学点开发|关于Java多线程用法解析
  5. IDEA在jsp页面写out.print()代码报错
  6. mybatis写当天 当月的数据 时间段数据https://www.cnblogs.com/xzjf/p/7600533.html
  7. 重新上课,学习HTML的第一天
  8. LiveVideoStackCon深圳-透过业务看QoE
  9. c语言编译器怎么用scanfkl,C语言一些笔记
  10. [Bugku][Web][CTF] 16-29 write up
  11. SkyEye图形化界面使用技巧篇(一)
  12. python cnn代码详解 keras_python – CNN返回相同的分类结果(keras)
  13. 汽车辐射监测系统-Qt开发
  14. 第二阶段冲刺第六天站立会议
  15. 【原创】【android逆向系列】1:真机(小米note 3)root(从本人简书博客移入)
  16. 亚马逊美国站UL2849电动自行车标准测试报告
  17. php获取应用宝app下载连接
  18. 任何经历,都是一种积累
  19. 2014 android 新技术,向友商学习 Android 12新功能前瞻:似曾相识
  20. 【原创】随手记下-电脑版微信双开

热门文章

  1. B - A Funny Bipartite Graph
  2. [ZJOI2007] 时态同步(拓扑序)
  3. 多重背包的二进制优化(ybtoj-宝物筛选)
  4. 内部设计师揭秘!王者峡谷中竟有隐藏的c++代码??!!腾讯已经炸了!!!
  5. 51nod1676-无向图同构【乱搞】
  6. CF891E-Lust【EGF】
  7. 欢乐纪中某A and B组赛【2019.1.23】
  8. 概率期望题(期望 DP)做题记录
  9. 【做题记录】[NOIP2016 普及组] 魔法阵
  10. 【动态规划】叠放箱子问题(ssl 1640)