【Spring Boot實戰與進階】條件註解@Conditional的使用

Spring Boot是很優秀的框架,它的出現簡化了新Spring應用的初始搭建以及開發過程,大大減少了代碼量,目前已被大多數企業認可和使用。這個專欄將對Spring Boot框架從淺入深,從實戰到進階,不但我們要懂得如何去使用,還要去剖析框架源碼,學習其優秀的設計思想。

彙總目錄鏈接:【Spring Boot實戰與進階】學習目錄


  Spring Boot 是根據配置文件中的內容,決定是否創建 bean,以及如何創建 bean 到 Spring 容器中,而 Spring boot 自動化配置的核心控制,就是 @Conditional 註解。

1、新建EncodingConverter接口,以及兩個實現類

public interface EncodingConverter {
}
public class GBKEncodingConverter implements EncodingConverter {
}
public class UTF8EncodingConverter implements EncodingConverter {
}

2、GBKCondition類

public class GBKCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding = System.getProperty("file.encoding");
        if ("gbk".equals(encoding.toLowerCase())) {
            return true;
        }
        return false;
    }
}

3、UTF8Condition類

public class UTF8Condition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding = System.getProperty("file.encoding");
        if ("utf-8".equals(encoding.toLowerCase())) {
            return true;
        }
        return false;
    }
}

4、EncodingConverterConfig配置類

@SpringBootConfiguration
public class EncodingConverterConfig {

    @Bean
    @Conditional(UTF8Condition.class)
    public EncodingConverter createUTF8Converter() {
        return new UTF8EncodingConverter();
    }

    @Bean
    @Conditional(GBKCondition.class)
    public EncodingConverter createGBKConverter() {
        return new GBKEncodingConverter();
    }
}

5、BootConditionConfigApplication類

@SpringBootApplication
public class BootConditionConfigApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(BootConditionConfigApplication.class, args);
                
		//獲取該接口所有實現類的Bean
        Map<String, EncodingConverter> beansOfType = context.getBeansOfType(EncodingConverter.class);
        System.out.println(beansOfType);
        System.out.println(System.getProperty("file.encoding"));

        context.close();
    }
}

6、控制檯輸出

{createUTF8Converter=com.boot.condition.bootconditionconfig.converter.UTF8EncodingConverter@263f04ca}
UTF-8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章