Spring @Conditional注解原理解析
這篇文章主要介紹了Spring @Conditional注解原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
@Conditional是Spring4新提供的注解,它的作用是根據(jù)某個條件加載特定的bean。
我們需要創(chuàng)建實現(xiàn)類來實現(xiàn)Condition接口,這是Condition的源碼
public interface Condition {
boolean matches(ConditionContext var1, AnnotatedTypeMetadata var2);
}
所以我們需要重寫matches方法,該方法返回boolean類型。
首先我們準備根據(jù)不同的操作系統(tǒng)環(huán)境進行對容器加載不同的bean,先創(chuàng)建Person
public class Person {
}
創(chuàng)建實現(xiàn)類LinuxCondition和WindowCondiction,
LinuxCondition:
public class WindowCondiction implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return true;
}
}
WindowCondiction:
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return true;
}
}
配置類:給相應的bean加上 @Conditional注解,里面的括號將返回boolean類型,返回true則加載bean
@Configuration
public class MainConfig {
@Profile("window")
@Conditional(WindowCondiction.class)
@Bean
public Person person01(){
return new Person("李思",30);
}
@Profile("linux")
@Conditional(LinuxCondition.class)
@Bean
public Person person02(){
return new Person("wangwu",35);
}
}
測試:現(xiàn)在是按照linux環(huán)境,@Profile注解先匹配linux的bean,再根據(jù)@Conditional 返回的類型判斷是否加載bean,這里都設置返回true,所以應該打印
Person{name='wangwu', age=35}
public class CondictionTest {
@Test
public void test(){
//創(chuàng)建容器
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
//設置需要激活的環(huán)境
applicationContext.getEnvironment().setActiveProfiles("linux");
//設置主配置類
applicationContext.register(MainProfileConfig.class);
//啟動刷新容器
applicationContext.refresh();
String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class);
for (String name : beanNamesForType){
System.out.println(name);
}
applicationContext.close();
}
}
如果把LinuxCondition的返回值該為false,會報找不到bean的異常
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.springbean.Person' available
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
使用Java編寫導出不確定行數(shù)列數(shù)數(shù)據(jù)的工具類
這篇文章主要為大家詳細介紹了如何使用Java編寫導出不確定行數(shù)列數(shù)數(shù)據(jù)的工具類,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-03-03
Spring?Boot2.6.0新特性之默認禁止循環(huán)引用
Spring?Boot2.6.0為我們帶來很多好用的新特性/改進,這篇文章主要給大家介紹了關于Spring?Boot2.6.0新特性之默認禁止循環(huán)引用的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-02-02
使用IDEA異常斷點來定位java.lang.ArrayStoreException的問題
這篇文章主要介紹了使用IDEA異常斷點來定位java.lang.ArrayStoreException的問題,平常開發(fā)過程中面對這種描述不夠清楚,無法定位具體原因的問題該如何處理,下面我們來一起學習一下吧2019-06-06
Mybatis自關聯(lián)查詢一對多查詢的實現(xiàn)示例
這篇文章主要介紹了Mybatis自關聯(lián)查詢一對多查詢的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02
java中l(wèi)ist.forEach()和list.stream().forEach()區(qū)別
這篇文章主要介紹了java中l(wèi)ist.forEach()和list.stream().forEach()區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Spring Boot 2.x基礎教程之使用@Scheduled實現(xiàn)定時任務的方法
在Spring Boot中編寫定時任務是非常簡單的事,下面通過實例介紹如何在Spring Boot中創(chuàng)建定時任務,實現(xiàn)每過5秒輸出一個當前時間,感興趣的朋友跟隨小編一起看看吧2021-07-07

