Spring 註解@Value詳解
阿新 • • 發佈:2018-12-05
一 配置方式
@value需要引數,這裡引數可以是兩種形式:
@Value("#{configProperties['t1.msgname']}")或者@Value("${t1.msgname}");
這兩形式,在配置上有什麼區別:
1、@Value("#{configProperties['t1.msgname']}")這種形式的配置中有“configProperties”,其實它指定的是配置檔案的載入物件:配置如下:
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>classpath:/config/t1.properties</value> </list> </property> </bean>
這樣配置就可完成對屬性的具體注入了;
2、@Value("${t1.msgname}")這種形式不需要指定具體載入物件,這時候需要一個關鍵的物件來完成PreferencesPlaceholderConfigurer,
這個物件的配置可以利用上面配置1中的配置,也可以自己直接自定配置檔案路徑。
如果使用配置1中的配置,可以寫成如下情況:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> <property name="properties" ref="configProperties"/> </bean>
如果直接指定配置檔案的話,可以寫成如下情況:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="location">
<value>config/t1.properties</value>
</property>
</bean>
二 用法
Spring 通過註解獲取*.porperties檔案的內容,除了xml配置外,還可以通過@value方式來獲取。
使用方式必須在當前類使用@Component,xml檔案內配置的是通過pakage掃描方式,
例如:<context:component-scan base-package="pakage_name" />
package com.jumore.finance.pay.request.lianlian;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* 連連請求引數基類
* @ClassName: LianLianBaseRequest
* @Description:
* @Author: zdq
* @Date: 2015年10月28日
*/
@Component("lianLianBaseRequest")
public class LianLianBaseRequest {
/** 商戶號 **/
@Value("#{configProperties['lianlian.oidPartner']}")
private String oid_partner;
/** 加密key **/
@Value("#{configProperties['lianlian.MD5Key']}")
private String md5_key;
/** 連連公鑰 **/
@Value("#{configProperties['lianlian.lianlianPubKey']}")
private String lianlian_pub_key;
//...........
}
xml配置:
<!-- 啟動包掃描功能,以便註冊帶有@Controller、@Service、@repository、@Component等註解的類成為spring的bean -->
<bean>
<context:component-scan base-package="com.jumore.finance.pay.request"/>
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath*:conf/lianlian.properties</value>
</list>
</property>
</bean>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="properties" ref="configProperties" />
</bean>
properties配置:
二、官方文件[2]