spring boot: 條件注解@Condition


@Conditional根據滿足某一個特定的條件創建一個特定的Bean(基於條件的Bean的創建,即使用@Conditional注解)。

比方說,當一個jar包在一個類的路徑下的時候,自動配置一個或多個Bean,或者只有某個Bean被創建才會去創建另外一個Bean。

通過實現Condition接口,並重寫期matches方法來構造判斷條件。若在windows系統洗運行程序,則輸出列表命令dir,若在linux操作系統下運行程序,則輸出命令為:ls.

1.判斷條件定義

判斷windows的條件

 1 package ch2.conditional2;
 2 
 3 //條件注解,並復寫此類
 4 import org.springframework.context.annotation.Condition;
 5 //條件注解容器
 6 import org.springframework.context.annotation.ConditionContext;
 7 import org.springframework.core.type.AnnotatedTypeMetadata;
 8 
 9 public class LinuxCondition implements Condition {
10 
11     @Override
12     public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
13         // TODO Auto-generated method stub
14         return context.getEnvironment().getProperty("os.name").contains("Linux");
15     }
16 
17 }

判定linux的條件

 1 package ch2.conditional2;
 2 
 3 //條件注解接口類,復寫metches
 4 import org.springframework.context.annotation.Condition;
 5 import org.springframework.context.annotation.ConditionContext;
 6 import org.springframework.core.type.AnnotatedTypeMetadata;
 7 
 8 public class WindowsCondition implements Condition {
 9 
10     @Override
11     public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
12         // TODO Auto-generated method stub
13         return context.getEnvironment().getProperty("os.name").contains("Windows");
14     }
15 
16 }

 

2不同系統下的Bean類

1接口

1 package ch2.conditional2;
2 
3 public interface ListService {
4 
5     public String showListCmd();
6 }

2windows下要創建的Bean類

 1 package ch2.conditional2;
 2 
 3 import ch2.conditional2.ListService;
 4 
 5 public class WindowsListService implements ListService {
 6 
 7     @Override
 8     public String showListCmd() {
 9         // TODO Auto-generated method stub
10         return "dir";
11     }
12 
13 }

3linux下要創建的Bean類

 1 package ch2.conditional2;
 2 
 3 import ch2.conditional2.ListService;
 4 
 5 public class LinuxListService implements ListService {
 6 
 7     @Override
 8     public String showListCmd() {
 9         // TODO Auto-generated method stub
10         return "ls";
11     }
12 
13 }

 

3配置類

package ch2.conditional2;

//配置類聲明
import org.springframework.context.annotation.Configuration;
//bean聲明
import org.springframework.context.annotation.Bean;
//條件限制
import org.springframework.context.annotation.Conditional;

//聲明為配置類
@Configuration
public class ConditionConfig {

    //注解為Bean
    @Bean
    //注解條件判斷
    @Conditional(WindowsCondition.class)
    public ListService windowsListService()
    {
        return new WindowsListService();
    }
    
    //注解為Bean
    @Bean
    //注解條件判斷
    @Conditional(LinuxCondition.class)
    public ListService linuxListService()
    {
        return new LinuxListService();
    }
}

4運行

package ch2.conditional2;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

    public static void main(String[] args)
    {
        
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConfig.class);
        ListService listService = context.getBean(ListService.class);
        System.out.println( 
                context.getEnvironment().getProperty("os.name") +
                "系統的查看目錄的命令是: " +
                listService.showListCmd()
                );
        context.close();
    }
}

 

 

運行結果:Windows 10系統的查看目錄的命令是: dir

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM