需求:改寫一個JedisUtils,工具類,所以最好用靜態方法和變量。
@value("${redis.host}")
private static String redisHost;
運行后發現注入失敗。解決辦法:看了網上大家的說法,有用中間變量的,有用set方法賦值的。試了一下都是可以成功賦值的,
以下引用別人的代碼:
給參數注入,執行set方法(這里注意set方法中的static要去掉)
public static String zhifuUrl; @Value("${zhifu.url}") public void setZhifuUrl(String url) { CrmUtil.zhifuUrl = url; }
通過中間變量賦值:
public static String zhifuUrl; @Value("${zhifu.url}") private String zhifuUrlTmp; @PostConstruct public void init() { zhifuUrl = zhifuUrlTmp; }
最后需要注意的是這個在類上要加@Component,才可以成功注入。
*********************************************************************************************************************************************************
@Value("${}") 可以獲取對應屬性文件中定義的屬性值。
假如我有一個sys.properties文件 里面規定了一組值: web.view.prefix =/WEB-INF/views/
在springMvc.xml文件中引入下面的代碼
<context:property-placeholder ignore-unresolvable="true" location="classpath:sys.properties" />
這樣就可以通過@Value("${web.view.prefix}")獲取這個字符串,但是只能在springMvc.xml文件中掃描或者注冊的bean中才能通過@Value("${web.view.prefix}")獲取這個字符串,其他未在springMvc.xml掃描和定義的bean必須在相應的xml文件中引入上面代碼才能使用@Value("${}”)表達式
再controller或者其他組件中通過下面代碼即可獲取“”/WEB-INF/views/“”這個字符串
@Value("${web.view.prefix}") private String prefix;
*********************************************************************************************************************************************************
當需要在某個類中定義一個屬性,並且該屬性是一個已存在的bean,要為該屬性賦值或注入時在該屬性上一行使用@Resource(name="xxx"),相當於為該屬性注入一個名稱為xxx的bean。
@Resource(這個注解屬於J2EE的),默認安照名稱進行裝配,名稱可以通過name屬性進行指定,
如果沒有指定name屬性,當注解寫在字段上時,默認取字段名進行按照名稱查找,如果注解寫在setter方法上默認取屬性名進行裝配。 當找不到與名稱匹配的bean時才按照類型進行裝配。但是需要注意的是,如果name屬性一旦指定,就只會按照名稱進行裝配。
@Resource(name="baseDao") private BaseDao baseDao;
如BaseDao類使用@Value("${}”)獲取了配置屬性,則可以在其他類中使用@Resource注解標注這個類,然后get方法獲取即可,不需要再次使用注解讀取配置文件。