国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > 幫助中心 > 正文

Spring Boot中@ConditionalOnProperty的使用方法

2024-07-09 22:42:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

在Spring Boot的自動(dòng)配置中經(jīng)常看到@ConditionalOnProperty注解的使用,本篇文章帶大家來(lái)了解一下該注解的功能。下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

Spring Boot中的使用

在Spring Boot的源碼中,比如涉及到Http編碼的自動(dòng)配置、數(shù)據(jù)源類型的自動(dòng)配置等大量的使用到了@ConditionalOnProperty的注解。

HttpEncodingAutoConfiguration類中部分源代碼:

@Configuration(proxyBeanMethods = false)@EnableConfigurationProperties(HttpProperties.class)@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)@ConditionalOnClass(CharacterEncodingFilter.class)@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)public class HttpEncodingAutoConfiguration {  // 省略內(nèi)部代碼}

DataSourceConfiguration類中部分代碼:

@Configuration(proxyBeanMethods = false)@ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class)@ConditionalOnMissingBean(DataSource.class)@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.tomcat.jdbc.pool.DataSource",    matchIfMissing = true)static class Tomcat { // 省略內(nèi)部代碼}

很顯然,以上兩個(gè)自動(dòng)配置類中都通過(guò)@ConditionalOnProperty來(lái)控制自動(dòng)配置是否生效,下面我們來(lái)了解一下它的源碼和具體使用。

@ConditionalOnProperty源碼說(shuō)明

@ConditionalOnProperty注解類源碼如下:

@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.TYPE, ElementType.METHOD })@Documented@Conditional(OnPropertyCondition.class)public @interface ConditionalOnProperty {  // 數(shù)組,獲取對(duì)應(yīng)property名稱的值,與name不可同時(shí)使用  String[] value() default {};  // 配置屬性名稱的前綴,比如spring.http.encoding  String prefix() default "";  // 數(shù)組,配置屬性完整名稱或部分名稱  // 可與prefix組合使用,組成完整的配置屬性名稱,與value不可同時(shí)使用  String[] name() default {};  // 可與name組合使用,比較獲取到的屬性值與havingValue給定的值是否相同,相同才加載配置  String havingValue() default "";  // 缺少該配置屬性時(shí)是否可以加載。如果為true,沒(méi)有該配置屬性時(shí)也會(huì)正常加載;反之則不會(huì)生效  boolean matchIfMissing() default false;}

其中在歷史版本中還存在一個(gè)relaxedNames屬性:

//是否可以松散匹配boolean relaxedNames() default true;

最新版本中已經(jīng)不存在該屬性了。

通過(guò)注解ConditionalOnProperty上的@Conditional(OnPropertyCondition.class)代碼,可以看出ConditionalOnProperty屬于@Conditional的衍生注解。生效條件由OnPropertyCondition來(lái)進(jìn)行判斷。

使用方法

關(guān)于@ConditionalOnProperty的使用方法,我們?cè)谏厦娴腟pring Boot中的使用已經(jīng)看到。

@ConditionalOnProperty的核心功能是通過(guò)屬性name以及havingValue來(lái)實(shí)現(xiàn)的。

首先看matchIfMissing屬性,用來(lái)指定如果配置文件中未進(jìn)行對(duì)應(yīng)屬性配置時(shí)的默認(rèn)處理:默認(rèn)情況下matchIfMissing為false,也就是說(shuō)如果未進(jìn)行屬性配置,則自動(dòng)配置不生效。如果matchIfMissing為true,則表示如果沒(méi)有對(duì)應(yīng)的屬性配置,則自動(dòng)配置默認(rèn)生效。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南汇区| 张家界市| 定安县| 桂阳县| 油尖旺区| 三门县| 平武县| 家居| 永顺县| 昌宁县| 平谷区| 马公市| 海晏县| 泰来县| 黄梅县| 珲春市| 桂阳县| 东阳市| 阿勒泰市| 伊春市| 崇义县| 兖州市| 秀山| 浦东新区| 海伦市| 佛山市| 常德市| 应用必备| 威海市| 永康市| 安丘市| 佛山市| 盐山县| 丹凤县| 丰宁| 武功县| 蚌埠市| 卢湾区| 孟村| 同德县| 鄯善县|