天天看點

SpringBoot: Condition和Conditional注解的用法

一、建立2個繼承自Condition的類

package cn.edu.tju.config;

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

public class MyCondition1 implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return false;
    }
}      
package cn.edu.tju.config;

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

public class MyCondition2 implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return true;
    }
}      

二、建立一個配置類

package cn.edu.tju.config;

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

@Configuration
public class MyConditionConfig {
    @Bean
    @Conditional({MyCondition1.class})
    public String getString(){
        return "hello";
    }

    @Bean
    @Conditional({MyCondition2.class})
    public String getString2(){
        return "world";
    }
}      

三、在Spring boot 的啟動類檢視哪個bean被裝配了

package cn.edu.tju;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

import java.util.Arrays;

@SpringBootApplication
public class MyStart {
    public static void main(String[] args) {
        ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(MyStart.class);
        String[] names = configurableApplicationContext.getBeanNamesForType(String.class);
        System.out.println(Arrays.asList(names));
    }
}