最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

Spring @Value靜態(tài)屬性無法注入

2023-07-29 13:16 作者:凱小吧  | 我要投稿

場景

數據庫存的是相對路徑,服務推送等的host值填充

為了方便采用Spring配置文件@Value注入動態(tài)注入

而往往處理這些情況都喜歡封裝工具類靜態(tài)方法調用

配置文件

xxx.host=http:xxxx.com

工具類

@Component
public class XXXUtil {
? ?@Value("xxx.host")
? ?private static String XXXXHOST;

? ?private XXXUtil() {}
? ?
? ?public static String getXXXHost() {
? ? // 方法體省略
? ?}
}

看起來很簡單的一個開發(fā)任務,結果一測試發(fā)現host值一直未null。

明顯就是屬性沒有注入成功。

調試發(fā)現去掉static

private String XXXXHOST

可以!?。?/p>

未注入的原因

其實原因很簡單,認真思考下就知道原因。

@Value 注解是依賴于屬性的set方法進行注入的,而static修飾的屬性是類屬性,不存在set方法

解決方法

1、set方法手動賦值

利用非靜態(tài)setter方法注入靜態(tài)變量, 會在Spring加載的時候進行屬性注入

@Component
public class XXXUtil {
? ?
? ?private static String XXXXHOST;

? ?private XXXUtil() {}
? ?
? ?@Value("xxx.host")
? ?public void setHost(String host) {
? ? ? ?XXXUtil.XXXXHOST = host;
? ?}

? public static String getXXXHost() {
? ? // 方法體省略
? ?}
}

2、構造方法賦值

set方法差不多

@Component
public class XXXUtil {
? ?
? ?private static String XXXXHOST;

? ?private XXXUtil() {}
? ?
? ?@Value("xxx.host")
? ?public XXXUtil(String host) {
? ? ? ?XXXUtil.XXXXHOST = host;
? ?}

? ?public static String getXXXHost() {
? ? // 方法體省略
? ?}
}

3、@PostConstruct

@Component
public class MyComponent { ?
? ?@Value("${xxx.host}") ? ?
? ?private static final String CONSTANT_VALUE; ? ?
? ? *// 省略其他代碼*
}@Configuration
@DependsOn("myComponent")
public class StaticConstantInjectionConfig {

? ?@Bean
? ?public MyComponent myComponent() {
? ? ? ?MyComponent myComponent = new MyComponent();
? ? ? ?myComponent.setStaticConstantValue(CONSTANT_VALUE);
? ? ? ?return myComponent;
? ?}

? ?// 省略其他代碼
}


4、@PostConstruct

Spring 只調用一次用@PostConstruct注釋的方法,就在 bean 屬性的初始化之后。

用 @PostConstruct注釋的方法 可以有任何訪問級別,但不能是靜態(tài)的

@Component
@Slf4j
public class XXXUtil {
? ?
? ?private static String XXXXHOST;

? ?private XXXUtil() {}
? ?
? ?@Value("xxx.host")
? ?private String hostStr;
? ?
? ?@PostConstruct
? ?public void init(){
? ? ? ?XXXXHOST = hostStr;
? ?}

? ?public static String getXXXHost() {
? ? // 方法體省略
? ?}
}

5、SpringUtils

不過多寫了,更多方法歡迎留言討論!

總結

@Value注解可以用來對Spring容器中的bean的屬性進行注入,它能夠被用在屬性,構造方法,普通方法上。


Spring @Value靜態(tài)屬性無法注入的評論 (共 條)

分享到微博請遵守國家法律
祁东县| 长寿区| 巴马| 仙桃市| 东海县| 达日县| 通山县| 济阳县| 蒙自县| 公主岭市| 洞口县| 深州市| 大丰市| 巴彦淖尔市| 裕民县| 息烽县| 汨罗市| 都江堰市| 邓州市| 抚顺县| 天水市| 冕宁县| 石柱| 姚安县| 宜城市| 广平县| 盐亭县| 敦化市| 左贡县| 山东| 陇西县| 驻马店市| 卢龙县| 河津市| 呼图壁县| 临潭县| 泽普县| 天等县| 华坪县| 根河市| 内江市|