欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring注解之@Conditional使用解析

 更新時(shí)間:2024年01月03日 10:13:49   作者:潛水路人甲  
這篇文章主要介紹了Spring注解之@Conditional使用解析,@Conditional注解可以說是SpringBoot的條件注解,表示組件只有在所有指定條件都匹配時(shí)才有資格注冊(cè),條件是可以在 bean 定義注冊(cè)之前??以編程方式確定的任何狀態(tài),需要的朋友可以參考下

@Conditional

@Conditional注解可以說是SpringBoot的條件注解,表示組件只有在所有指定條件都匹配時(shí)才有資格注冊(cè),條件是可以在 bean 定義注冊(cè)之前??以編程方式確定的任何狀態(tài)。

@Conditional注解可以通過以下任何方式使用:

  • 作為直接或間接使用@Component注解的任何類的類型級(jí)注釋,包括@Configuration類
  • 作為元注解,用于編寫自定義構(gòu)造型注釋
  • 作為任何@Bean方法的方法級(jí)注解

如果@Configuration類被標(biāo)記為@Conditional ,那么與該類關(guān)聯(lián)的所有@Bean方法、 @Import 注解和@ComponentScan注解都將受制于條件。

SpringBoot @ConditionalOn*

SpringBoot提供的@ConditionalOn*的注解都是基于@Conditional注解實(shí)現(xiàn)

@ConditionalOnBean

僅當(dāng)滿足所有指定要求的 bean 已包含在BeanFactory中時(shí)才匹配的Conditional 。

必須滿足所有要求才能匹配條件,但不必由同一個(gè) bean 滿足。

@ConditionalOnClass

僅當(dāng)指定的類在類路徑上時(shí)才匹配的Conditional 。

可以在@Configuration類上安全地指定value() ,因?yàn)樵诩虞d類之前使用 ASM 解析注釋元數(shù)據(jù)。

放置在@Bean方法上時(shí)需要格外小心,考慮將條件隔離在單獨(dú)的Configuration類中,特別是如果方法的返回類型與value()中的值匹配。

@ConditionalOnCloudPlatform

當(dāng)指定的云平臺(tái)處于活動(dòng)狀態(tài)時(shí)匹配的Conditional。 

@ConditionalOnExpression

取決于 SpEL 表達(dá)式的值的條件元素的配置注解。

@ConditionalOnJava

根據(jù)運(yùn)行應(yīng)用程序的 JVM 版本匹配的Conditional。

@ConditionalOnJndi

基于 JNDI InitialContext的可用性和查找特定位置的能力匹配的Conditional。

@ConditionalOnMissingBean

僅當(dāng)BeanFactory中已不包含滿足指定要求的 bean 時(shí)才匹配的Conditional 。 條件匹配不必滿足任何要求,并且同一bean不必滿足這些要求。

@ConditionalOnMissingClass

僅當(dāng)指定的類不在類路徑上時(shí)才匹配的Conditional。

@ConditionalOnNotWebApplication

僅在應(yīng)用程序上下文不是 Web 應(yīng)用程序上下文時(shí)匹配的Conditional。

@ConditionalOnProperty

檢查指定屬性是否具有特定值的Conditional 。 默認(rèn)情況下,屬性必須存在于Environment中并且不等于false 。 havingValue()和matchIfMissing()屬性允許進(jìn)一步自定義。havingValue屬性可用于指定屬性應(yīng)具有的值。如果該屬性根本不包含在Environment中,則matchIfMissing()屬性。 默認(rèn)情況下,缺少的屬性不匹配。

@ConditionalOnResource

僅當(dāng)指定資源在類路徑上時(shí)才匹配的Conditional 。

@ConditionalOnSingleCandidate

僅當(dāng)指定類的 bean 已包含在BeanFactory中并且可以確定單個(gè)候選者時(shí)才匹配的Conditional 。 如果BeanFactory中已包含多個(gè)匹配的 bean 實(shí)例但已定義主要候選者,則條件也將匹配; 本質(zhì)上,如果自動(dòng)裝配具有定義類型的 bean,則條件匹配將成功。 該條件只能匹配到目前為止已由應(yīng)用程序上下文處理的 bean 定義,因此,強(qiáng)烈建議僅在自動(dòng)配置類上使用此條件。 如果候選 bean 可能由另一個(gè)自動(dòng)配置創(chuàng)建,請(qǐng)確保使用此條件的 bean 在之后運(yùn)行。

@ConditionalOnWebApplication

當(dāng)應(yīng)用程序是 Web 應(yīng)用程序時(shí)匹配的Conditional 。 默認(rèn)情況下,任何 Web 應(yīng)用程序都會(huì)匹配,但可以使用type()屬性縮小范圍。

@ConditionalOn*實(shí)現(xiàn)原理

以@ConditionalOnBean為例

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(OnBeanCondition.class)
public @interface ConditionalOnBean{
//...
}

@Conditional作為元注解,OnBeanCondition繼承SpringBootCondition,SpringBootCondition

實(shí)現(xiàn)自org.springframework.context.annotation.Condition。

public abstract class SpringBootCondition implements Condition {
	private final Log logger = LogFactory.getLog(getClass());
	@Override
	public final boolean matches(ConditionContext context,
			AnnotatedTypeMetadata metadata) {
		String classOrMethodName = getClassOrMethodName(metadata);
		try {
			ConditionOutcome outcome = getMatchOutcome(context, metadata);
			logOutcome(classOrMethodName, outcome);
			recordEvaluation(context, classOrMethodName, outcome);
			return outcome.isMatch();
		}
		catch (NoClassDefFoundError ex) {
		}
	}
}
//org.springframework.boot.autoconfigure.condition.OnBeanCondition
	@Override
	public ConditionOutcome getMatchOutcome(ConditionContext context,
			AnnotatedTypeMetadata metadata) {
		ConditionMessage matchMessage = ConditionMessage.empty();
		if (metadata.isAnnotated(ConditionalOnBean.class.getName())) {
			BeanSearchSpec spec = new BeanSearchSpec(context, metadata,
					ConditionalOnBean.class);
			MatchResult matchResult = getMatchingBeans(context, spec);
			if (!matchResult.isAllMatched()) {
				String reason = createOnBeanNoMatchReason(matchResult);
				return ConditionOutcome.noMatch(ConditionMessage
						.forCondition(ConditionalOnBean.class, spec).because(reason));
			}
			matchMessage = matchMessage.andCondition(ConditionalOnBean.class, spec)
					.found("bean", "beans")
					.items(Style.QUOTE, matchResult.getNamesOfAllMatches());
		}
        //...
		return ConditionOutcome.match(matchMessage);
	}

到此這篇關(guān)于Spring注解之@Conditional使用解析的文章就介紹到這了,更多相關(guān)@Conditional使用解析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Intellij IDEA實(shí)現(xiàn)springboot熱部署過程解析

    Intellij IDEA實(shí)現(xiàn)springboot熱部署過程解析

    這篇文章主要介紹了Intellij IDEA實(shí)現(xiàn)springboot熱部署過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring boot整合security詳解

    Spring boot整合security詳解

    Spring Security是一個(gè)功能強(qiáng)大且高度可定制的身份驗(yàn)證和訪問控制框架,本文主要介紹了SpringBoot整合Security安全框架的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Java中數(shù)組的使用與注意事項(xiàng)詳解(推薦)

    Java中數(shù)組的使用與注意事項(xiàng)詳解(推薦)

    數(shù)組是一組地址連續(xù)、長(zhǎng)度固定的具有相同類型的數(shù)據(jù)的集合,通過數(shù)組下標(biāo)我們可以指定數(shù)字中的每一個(gè)元素,下面這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的使用與注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • springboot?log4j2日志框架整合與使用過程解析

    springboot?log4j2日志框架整合與使用過程解析

    這篇文章主要介紹了springboot?log4j2日志框架整合與使用,包括引入maven依賴和添加配置文件log4j2-spring.xml的相關(guān)知識(shí),需要的朋友可以參考下
    2022-05-05
  • java控制臺(tái)版實(shí)現(xiàn)五子棋游戲

    java控制臺(tái)版實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了java控制臺(tái)版實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Jmeter如何將每次測(cè)試的結(jié)果保存到文件中

    Jmeter如何將每次測(cè)試的結(jié)果保存到文件中

    這篇文章主要介紹了Jmeter如何將每次測(cè)試的結(jié)果保存到文件中的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • servlet3文件上傳操作

    servlet3文件上傳操作

    這篇文章主要介紹了servlet3文件上傳操作的相關(guān)資料,需要的朋友可以參考下
    2017-11-11
  • Java對(duì)數(shù)組實(shí)現(xiàn)選擇排序算法的實(shí)例詳解

    Java對(duì)數(shù)組實(shí)現(xiàn)選擇排序算法的實(shí)例詳解

    這篇文章主要介紹了Java對(duì)數(shù)組實(shí)現(xiàn)選擇排序算法的實(shí)例,選擇排序的比較次數(shù)為 O(N^2)而交換數(shù)為O(N),需要的朋友可以參考下
    2016-04-04
  • Spring Security組件一鍵接入驗(yàn)證碼登錄和小程序登錄的詳細(xì)過程

    Spring Security組件一鍵接入驗(yàn)證碼登錄和小程序登錄的詳細(xì)過程

    這篇文章主要介紹了Spring Security 一鍵接入驗(yàn)證碼登錄和小程序登錄,簡(jiǎn)單介紹一下這個(gè)插件包的相關(guān)知識(shí),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-04-04
  • SpringBoot中隨機(jī)鹽值+雙重SHA256加密實(shí)戰(zhàn)

    SpringBoot中隨機(jī)鹽值+雙重SHA256加密實(shí)戰(zhàn)

    本文主要介紹了SpringBoot中隨機(jī)鹽值+雙重SHA256加密實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07

最新評(píng)論