真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Spring中如何使用@Conditional條件注解

今天就跟大家聊聊有關(guān)Spring中如何使用@Conditional條件注解,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

大新網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。

一、@Conditional的源碼

@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Conditional {  /**   * All {@link Condition Conditions} that must {@linkplain Condition#matches match}   * in order for the component to be registered.   */  Class[] value();}

從源碼中可以看到,@Conditional注解可以用在類和方法上,需要傳入一個(gè)實(shí)現(xiàn)了Condition接口class數(shù)組。

二、代碼示例

下面將以不同的操作系統(tǒng)為條件,通過實(shí)現(xiàn)Condition接口,并重寫其matches方法來構(gòu)造判斷條件。若在Windows系統(tǒng)下運(yùn)行程序,則輸出列表命令為dir;若在Linux系統(tǒng)下運(yùn)行程序,則輸出列表命令為ls。

1.判斷條件類的定義

(1).判斷Windows的條件

package com.study.day01;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;/** * @Auther: lifq * @Description: */public class WindowsCondition implements Condition {  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {    return context.getEnvironment().getProperty("os.name").contains("Windows");  }}

(2).判斷Linux的條件

package com.study.day01;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;/** * @Auther: lifq * @Description: */public class LinuxCondition implements Condition {  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {    return context.getEnvironment().getProperty("os.name").contains("Linux");  }}

2.不同系統(tǒng)下的Bean的類

(1).接口代碼

package com.study.day01;import org.springframework.stereotype.Service;/** * @Auther: lifq * @Description: */public interface ListService {  public String showListCmd();}

(2).Windows實(shí)現(xiàn)類代碼

package com.study.day01;/** * @Auther: lifq * @Description: */public class WindowsService implements ListService {  public String showListCmd() {    return "dir";  }}

(3).Linux實(shí)現(xiàn)類代碼

package com.study.day01;/** * @Auther: lifq * @Description: */public class LinuxService implements ListService {  public String showListCmd() {    return "ls";  }}

3.配置類

package com.study.day01;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Conditional;import org.springframework.context.annotation.Configuration;/** * @Auther: lifq * @Description: */@Configurationpublic class Config {  @Bean  @Conditional(WindowsCondition.class)  public ListService window() {    return new WindowsService();  }  @Bean  @Conditional(LinuxCondition.class)  public ListService linux() {    return new LinuxService();  }}

4.運(yùn)行類

package com.study.day01;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/** * @Auther: lifq * @Description: */public class Main01 {  public static void main (String []args) {    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);    ListService listService = applicationContext.getBean(ListService.class);    System.out.println(applicationContext.getEnvironment().getProperty("os.name") + "系統(tǒng)下的列表命令為:" + listService.showListCmd());  }}

我的是Windows操作系統(tǒng),輸出結(jié)果為dir,運(yùn)行截圖如下:

運(yùn)行截圖

@Conditional注解例子演示完成,有問題歡迎留言溝通哦!

完整源碼地址:https://github.com/suisui2019/springboot-study

三、@Conditional的擴(kuò)展注解

@ConditionalOnBean:僅僅在當(dāng)前上下文中存在某個(gè)對象時(shí),才會(huì)實(shí)例化一個(gè)Bean。  @ConditionalOnClass:某個(gè)class位于類路徑上,才會(huì)實(shí)例化一個(gè)Bean。  @ConditionalOnExpression:當(dāng)表達(dá)式為true的時(shí)候,才會(huì)實(shí)例化一個(gè)Bean。  @ConditionalOnMissingBean:僅僅在當(dāng)前上下文中不存在某個(gè)對象時(shí),才會(huì)實(shí)例化一個(gè)Bean。  @ConditionalOnMissingClass:某個(gè)class類路徑上不存在的時(shí)候,才會(huì)實(shí)例化一個(gè)Bean。  @ConditionalOnNotWebApplication:不是web應(yīng)用,才會(huì)實(shí)例化一個(gè)Bean。  @ConditionalOnBean:當(dāng)容器中有指定Bean的條件下進(jìn)行實(shí)例化。  @ConditionalOnMissingBean:當(dāng)容器里沒有指定Bean的條件下進(jìn)行實(shí)例化。  @ConditionalOnClass:當(dāng)classpath類路徑下有指定類的條件下進(jìn)行實(shí)例化。  @ConditionalOnMissingClass:當(dāng)類路徑下沒有指定類的條件下進(jìn)行實(shí)例化。  @ConditionalOnWebApplication:當(dāng)項(xiàng)目是一個(gè)Web項(xiàng)目時(shí)進(jìn)行實(shí)例化。  @ConditionalOnNotWebApplication:當(dāng)項(xiàng)目不是一個(gè)Web項(xiàng)目時(shí)進(jìn)行實(shí)例化。  @ConditionalOnProperty:當(dāng)指定的屬性有指定的值時(shí)進(jìn)行實(shí)例化。  @ConditionalOnExpression:基于SpEL表達(dá)式的條件判斷。  @ConditionalOnJava:當(dāng)JVM版本為指定的版本范圍時(shí)觸發(fā)實(shí)例化。  @ConditionalOnResource:當(dāng)類路徑下有指定的資源時(shí)觸發(fā)實(shí)例化。  @ConditionalOnJndi:在JNDI存在的條件下觸發(fā)實(shí)例化。  @ConditionalOnSingleCandidate:當(dāng)指定的Bean在容器中只有一個(gè),或者有多個(gè)但是指定了首選的Bean時(shí)觸發(fā)實(shí)例化。

看完上述內(nèi)容,你們對Spring中如何使用@Conditional條件注解有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)頁題目:Spring中如何使用@Conditional條件注解
本文URL:http://weahome.cn/article/pidcpj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部