Spring高級話題-條件註解

一、什麼是條件註解

根據特定的條件來控制Bean的創建行爲
使用到的註解 @Conditional

二、如何使用條件註解

  1. 通過實現Condition接口並重寫matches方法(構造判斷條件)來實現一個條件判斷類
  2. 在配置Bean時使用@Conditional註解,並指定條件判斷類,實現有條件地創建Bean

三、conditionDemo

通過判斷程序在什麼系統下運行,來創建對應的Bean,並輸出該系統下列表展示命令

條件判斷類

package com.cactus.demo.conditional;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
 * Created by liruigao
 * Date: 2019-12-05 16:08
 * Description:
 */


public class MacCondition implements Condition {
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String osName = context.getEnvironment().getProperty("os.name");
        System.out.println("osName : " + osName);
        return osName.contains("Mac");
    }
}

條件判斷類

package com.cactus.demo.conditional;


import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
 * Created by liruigao
 * Date: 2019-12-05 16:13
 * Description:
 */


public class WindowsCondition implements Condition {
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String osName = context.getEnvironment().getProperty("os.name");
        System.out.println("osName : " + osName);
        return osName.contains("windows");
    }
}

demoBean接口類

package com.cactus.demo.conditional;

/**
 * Created by liruigao
 * Date: 2019-12-05 16:15
 * Description:
 */


public interface IListService {
    public void list();
}

demoBean

package com.cactus.demo.conditional;

/**
 * Created by liruigao
 * Date: 2019-12-05 16:16
 * Description:
 */


public class MacListService implements IListService {
    public void list() {
        System.out.println("mac command:  ls");
    }
}

demoBean

package com.cactus.demo.conditional;

/**
 * Created by liruigao
 * Date: 2019-12-05 16:16
 * Description:
 */


public class WindowsListService implements IListService {
    public void list() {
        System.out.println("windows command : dir");
    }
}

配置類

package com.cactus.demo.conditional;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

/**
 * Created by liruigao
 * Date: 2019-12-05 16:04
 * Description:
 */

@Configuration
public class ConditionalConifg {

    @Bean
    @Conditional(WindowsCondition.class)
    public IListService windowsListService() {
        return new WindowsListService();
    }

    @Bean
    @Conditional(MacCondition.class)
    public IListService macListService() {
        return new MacListService();
    }
}

Main

package com.cactus.demo.conditional;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Created by liruigao
 * Date: 2019-12-05 16:02
 * Description:
 */


public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionalConifg.class);
        IListService listService = context.getBean(IListService.class);
        listService.list();
        context.close();
    }
}

Result

WindowsCondition --> osName : Mac OS X
MacCondition --> osName : Mac OS X
mac command:  ls
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章