spring 如何將配置信息注入靜態(tài)變量的方法
我們學(xué)習(xí)過將配置信息,通過@Value()的方法注入到對象的變量。這是由于對象是由spring來托管的。那么非spring如果,我們需要在靜態(tài)方法中,使用配置文件中的值,又該怎么做呢?
傳統(tǒng)的錯誤作法
application.properties
spring.redis.host=test
@Component
public class RedisServiceImpl implements RedisService {
...
@Value("${spring.redis.host}")
static public String host;
@Value("${spring.redis.port}")
static public Integer port;
...
static public JedisPool getJedisPool() {
if (RedisServiceImpl.host == null) {
logger.info("host 未注入");
}
}
控制臺打印為: "host 未注入
正確的方法
@Component
public class RedisServiceImpl implements RedisService {
...
static public String host;
static public Integer port;
@Value("${spring.redis.host}")
public void setHost(String host) {
RedisServiceImpl.host = host;
}
@Value("${spring.redis.port}")
public void setPort(Integer port) {
RedisServiceImpl.port = port;
}
...
static public JedisPool getJedisPool() {
if (RedisServiceImpl.host == null) {
logger.info("host 未注入");
} else {
logger.info("host 值為" + RedisServiceImpl.host);
}
}
控制臺正確的打印了注入的值。
原因猜想
spring進(jìn)行組件掃描,遇到@Component時,初始化對象 RedisServiceImpl, 初始化過程中,掃描到@Value注解,將值注入給方法。
接著,方法將值傳給了RedisServiceImpl類,故RedisServiceImpl有值 -- 正解。
如果將@Value(),直接加到靜態(tài)私有變量上,則在初始化對象時,由于靜態(tài)私有變量屬于類,所以spring未對類進(jìn)行操作 -- 錯誤。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java學(xué)習(xí)筆記:關(guān)于Java?double類型相加問題
這篇文章主要介紹了關(guān)于Java?double類型相加問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解
這篇文章主要介紹了SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解,SpringMVC中Spring容器的關(guān)系是通過監(jiān)聽方式啟動的,那么Spring與Servlet的Web容器(如:Tomcat、jetty)的關(guān)系則是通過DispatcherServlet進(jìn)行關(guān)聯(lián),需要的朋友可以參考下2024-01-01
SpringMVC響應(yīng)視圖和結(jié)果視圖詳解
這篇文章主要介紹了SpringMVC響應(yīng)視圖和結(jié)果視圖,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Java線程池隊列PriorityBlockingQueue原理分析
這篇文章主要介紹了Java線程池隊列PriorityBlockingQueue原理分析,PriorityBlockingQueue隊列是?JDK1.5?的時候出來的一個阻塞隊列,但是該隊列入隊的時候是不會阻塞的,永遠(yuǎn)會加到隊尾,需要的朋友可以參考下2023-12-12
SpringBoot項目中@Test不出現(xiàn)可點擊運(yùn)行的按鈕問題
這篇文章主要介紹了SpringBoot項目中@Test不出現(xiàn)可點擊運(yùn)行的按鈕問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

