Spring基于@Conditional條件化裝配bean
一 前言
理解spring的如何根據(jù)條件裝配bean有助于我們更好使用springboot進行開發(fā),和源碼理解;
二 @Conditional 裝配bean
思路如下
Spring中提供了@Conditional注解實現(xiàn)條件化是否裝配bean,這樣可以根據(jù)條件動態(tài)的裝配bean;
要判定@Conditional 注解是否該裝配bean還需要Condition 接口配合,我們只須實現(xiàn) Condition 接口,重寫matches 方法;
根據(jù)matches方法返回的布爾值進行判定@Conditional是否需要裝配bean
實現(xiàn)過程如下
2.1 用戶類
用戶類用于配置類是否裝配該Bean
/**
* @Author lsc
* <p> </p>
*/
public class User {
private String userName;
// 省略 set get
}
2.2 Condition實現(xiàn)類
RuntimeExist 實現(xiàn) Condition ,使用 conditionContext 獲取jvm 環(huán)境變量,如果存在則返回 true ,否則返回false;其中conditionContext還有如下方法
- getRegistry():使用BeanDefinitionRegistry的檢查bean定義;
- getBeanFactory():使用ConfigurableListableBeanFactory檢查bean是否存在;
- getEnvironment():Environment環(huán)境變量
- getResourceLoader():ResourceLoader加載的資源;
- getClassLoader():ClassLoader加載的類。
public class RuntimeExist implements Condition {
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
// 獲取jvm 運行時環(huán)境
Environment environment = conditionContext.getEnvironment();
// 檢查 jvm 運行時環(huán)境是否存在屬性
return environment.containsProperty("java.runtime.name");
}
}
2.3 用戶配置類
根據(jù) RuntimeExist的 matches 方法的返回值 是否裝配bean; 這邊設置了屬性名稱 zszxz,以便于更好的測試;
/**
* @Author lsc
* <p> </p>
*/
@Configuration
public class UserConfig {
@Bean
// 根據(jù) RuntimeExist的 matches 方法的返回值 是否裝配bean
@Conditional(RuntimeExist.class)
public User user(){
User user = new User();
user.setUserName("zszxz");
return user;
}
}
2.4 測試
由于 jvm 運行時環(huán)境存在 java.runtime.name 屬性 ,故會裝配成功,會打印出 zszxz ;
如果將 java.runtime.name 改為 任意jvm 運行時不存在的屬性 ,測試就會報異常;
@RunWith(SpringJUnit4ClassRunner.class)//創(chuàng)建spring應用上下文
@ContextConfiguration(classes= UserConfig.class)//加載配置類
public class ConditionTest {
@Autowired
User user;
@Test
public void test(){
// zszxz
System.out.println(user.getUserName());
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Java請求調用參數(shù)格式為form-data類型的接口代碼示例
這篇文章主要給大家介紹了關于Java請求調用參數(shù)格式為form-data類型的接口的相關資料,文中給出了詳細的代碼示例,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08
Spring Cloud下OAUTH2注銷的實現(xiàn)示例
本篇文章主要介紹了Spring Cloud下OAUTH2注銷的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
SpringBoot?項目打成?jar后加載外部配置文件的操作方法
這篇文章主要介紹了SpringBoot?項目打成?jar后加載外部配置文件的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03

