溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring中如何使用條件注解

發(fā)布時間:2021-06-23 15:22:13 來源:億速云 閱讀:248 作者:Leah 欄目:編程語言

本篇文章為大家展示了Spring中如何使用條件注解,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

一 點睛

Spring 4 提供了一個更通用的基于條件的Bean的創(chuàng)建,即使用@Conditional注解。

@Conditional根據(jù)滿足僅一個特定條件創(chuàng)建一個特定的Bean。也就是根據(jù)特定的條件來控制Bean的創(chuàng)建行為,這樣就可以利用這個特性進行一些自動的配置。

二 項目說明

以不同的操作系統(tǒng)為條件,通過實現(xiàn)@Condition接口,并重寫matches方法來構造條件。若在windows系統(tǒng)下運行,則輸出列表命令為dir;若在Linux操作系統(tǒng)下運行程序,則輸出列表命令為ls。

三 實戰(zhàn)

1 判斷條件定義

1.1 windows的判定條件

package com.wisely.highlight_spring4.ch4.conditional;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;public class WindowsCondition implements Condition { public boolean matches(ConditionContext context,   AnnotatedTypeMetadata metadata) {  return context.getEnvironment().getProperty("os.name").contains("Windows"); }}

1.2 Linux的判定條件

package com.wisely.highlight_spring4.ch4.conditional;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;public class LinuxCondition implements Condition { public boolean matches(ConditionContext context,   AnnotatedTypeMetadata metadata) {  return context.getEnvironment().getProperty("os.name").contains("Linux"); }}

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

2.1 接口

package com.wisely.highlight_spring4.ch4.conditional;public interface ListService {  public String showListCmd();}

2.2 Window下創(chuàng)建的Bean類

package com.wisely.highlight_spring4.ch4.conditional;public class WindowsListService implements ListService {  @Override  public String showListCmd() {   return "dir";  }}

2.3 Linux下所創(chuàng)建的Bean類

package com.wisely.highlight_spring4.ch4.conditional;public class LinuxListService implements ListService{  @Override  public String showListCmd() {   return "ls";  }}

3 配置類

package com.wisely.highlight_spring4.ch4.conditional;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Conditional;import org.springframework.context.annotation.Configuration;@Configurationpublic class ConditionConifg { @Bean @Conditional(WindowsCondition.class) //符合window條件,則實例化WindowsListService public ListService windowsListService() {  return new WindowsListService(); } @Bean @Conditional(LinuxCondition.class) //符合Linux條件,則實例化LinuxListService public ListService linuxListService() {  return new LinuxListService(); }}

4 主類

package com.wisely.highlight_spring4.ch4.conditional;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main {  public static void main(String[] args) {   AnnotationConfigApplicationContext context =    new AnnotationConfigApplicationContext(ConditionConifg.class);   ListService listService = context.getBean(ListService.class);   System.out.println(context.getEnvironment().getProperty("os.name")     + "系統(tǒng)下的列表命令為: "     + listService.showListCmd());   context.close();  }}

四 運行

windows下運行結果如下:

Windows 10系統(tǒng)下的列表命令為: dir

五 擴展

如果把LinuxCondition條件改成和WindowsCondition一樣的條件會怎樣呢?即有兩個條件都匹配會怎樣呢?

修改后的代碼如下:

public class LinuxCondition implements Condition { public boolean matches(ConditionContext context,   AnnotatedTypeMetadata metadata) {  return context.getEnvironment().getProperty("os.name").contains("Windows"); }}

修改后再運行,報錯了:

Exception in thread "main" org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.wisely.highlight_spring4.ch4.conditional.ListService] is defined: expected single matching bean but found 2: linuxListService,windowsListService at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:365) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:331) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:968) at com.wisely.highlight_spring4.ch4.conditional.Main.main(Main.java:11)

報錯信息很明顯:

[com.wisely.highlight_spring4.ch4.conditional.ListService] is defined: expected single matching bean but found 2: linuxListService,windowsListService

上述內容就是Spring中如何使用條件注解,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI