Spring裝配Bean(七) Spring的執行時注入
Spring中兩種執行時求值的方式
前面在xml中建立bean的時候,使用<construction-arg>注入屬性的值的時候,採用硬編碼,這種方式有時不是很合適,
Spring提供了下面方式實現,執行時注入值
1. 屬性佔位符(Property placeholder)
2. Spring表示式語言(SpEL)
屬性佔位符
* JavaConfig中使用註解@PropertySource註解和Environment
@Configuration
@PropertySource("classpath:com/bing/config/app.properties")
public class ExpressiveConfig {
@Autowired
Environment env;
@Bean
public HelloWorld gethelloWorld(){
return new HelloWorld(env.getProperty("message"));
}
}
app.properties檔案中
message = hello world!
@PropertySource引用了類路徑中一個名為app.properties的檔案,會將屬性檔案載入到Spring的Environment中,在使用Environment的方法獲取屬性值。
Environment的getProperty()方法:
,另外Environment提供了一些方法檢查profile是否處在啟用狀態
* XML解析屬性佔位符
Spring支援將屬性定義到外部的屬性的檔案中,並且使用佔位符值將其他插入到Spring bean中。在Spring裝配中,佔位符形式${}包裝屬性名稱.資料來源後面再說
<bean id="helloWorld" class="com.erong.service.HelloWorld" scope="session">
<property name="message" value="${message}"></property>
</bean>
如果我們依賴於元件掃描和自動裝配來建立和初始化應用元件的話,不用指定佔位符的配置檔案或類
,這種情況下,使用@Value註解,構造器可以改成如下所示:
@Component
public class HelloWorld {
private String message;
public HelloWorld(@Value("${message}") String message){
this.message = message;
}
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return "Your Message: " + message;
}
}
為了使用佔位符,必須要配置一個PropertySourcesPlaceholderConfigurer,能夠基於SpringEnvironment及其屬性源解析佔位符
JavaConfig中配置這個Bean,注意要寫在配置類中
@Bean
public PropertySourcesPlaceholderConfigurer getpspc(){
return new PropertySourcesPlaceholderConfigurer();
}
XML中配置這個Bean,在location屬性中指定配置檔案的位置
<!-- 使用佔位符${}必須配置的bean -->
<context:property-placeholder location="com/bing/config/app.properties"/>
使用Spring表示式語言進行裝配SpEL特性,包括:
* 使用bean的ID來引用bean;
* 呼叫方法和訪問物件的屬性;
* 對值進行算術、關係和邏輯運算;
* 正規表示式匹配;
* 集合操作
SpEL表示式要放到#{} 之中。
例如:
1. #{T(System).currentTimeMills()}計算結果ms數,T()將java.lang.System視為Java中對應的型別。因而看可以呼叫方法
2. 通過systemProperties物件引用系統屬性 #{systemProperties['disc.title']}
具體看下SpEL的使用
1. 表示字面值 ,表示浮點數、String值以及Boolean值 #{3.21} #{'hello'} #{false}
2. 呼叫Bean的屬性和方法.
#{sgtPeppers.artist} 獲取BeanID為sgtPeppers的bean的artist的屬性
#{artistSelector.selectArtis()?toUppperCase()} ?運算子號,在訪問右邊的內容前,確定是否是null
3. 在表示式中使用型別
需要使用T()運算子 #{T(java.lang.Math)}
* SpEL運算子
算術、比較、邏輯、條件運算子、三元運算子
* SpEL計算集合
[]運算子用來從集合或者陣列中按照索引獲取元素 #{'This is a test'[3]} index基於零開始
總的來說,在Spring裝配Bean時候:
1. Spring佔位符號${} ,適合注入一些常量資料,從配置檔案中讀取資料
2. Spring表示式#{}合適注入一些動態的資料,另一個Bean的資料等等
相關文章
- Spring bean 裝配SpringBean
- Spring裝配Bean(四)SpringBean
- Spring裝配Bean(一)SpringBean
- Spring裝配Bean(二)SpringBean
- 二、Spring裝配BeanSpringBean
- Spring IOC 一——Spring容器裝配BeanSpringBean
- Spring裝配Bean(六)Bean的作用域SpringBean
- 初識Spring —— Bean的裝配(一)SpringBean
- 初識Spring —— Bean的裝配(二)SpringBean
- Spring-04 Bean的自動裝配SpringBean
- 關於Spring的bean注入SpringBean
- Spring裝配Bean(五)profile註解和解決自動注入的歧義性SpringBean
- 2、spring注入及自動裝配Spring
- Spring注入Bean的幾種方式SpringBean
- Spring 學習筆記(五)執行時注入Spring筆記
- Spring入門(二):自動化裝配beanSpringBean
- Spring入門(三):通過JavaConfig裝配beanSpringJavaBean
- spring注入bean的幾種策略模式SpringBean模式
- Spring中bean的四種注入方式SpringBean
- spring裝配Spring
- spring註解開發(一)Bean注入SpringBean
- 扒一扒Bean注入到Spring的那些姿勢BeanSpring
- Spring 原始碼分析之 bean 依賴注入原理(注入屬性)Spring原始碼Bean依賴注入
- Spring中給靜態欄位(field)注入beanSpringBean
- Spring 框架基礎(02):Bean的生命週期,作用域,裝配總結Spring框架Bean
- 探究Spring中Bean的執行緒安全性問題SpringBean執行緒
- Spring Bean的3種裝配方式SpringBean
- [Spring]BeanSpringBean
- 省掉bean自定義spring mvc註解注入json值BeanSpringMVCJSON
- spring中如何向一個單例bean中注入非單例beanSpring單例Bean
- Spring自動裝配BeansSpringBean
- Spring注入bean報錯 Error creating bean with name的網上找不到的解決方案SpringBeanError
- spring+groovy實現動態程式碼注入執行Spring
- SPRING IN ACTION 第4版筆記-第三章ADVANCING WIRING-006-給bean執行時注入值(Environment,Property檔案)...Spring筆記Bean
- Spring Bean容器SpringBean
- 【Spring】Bean管理SpringBean
- bean 的自動裝配Bean
- Spring 原始碼解讀第七彈!bean 標籤的解析Spring原始碼Bean