国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

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

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)屬性無法注入的評論 (共 條)

分享到微博請遵守國家法律
军事| 九寨沟县| 中阳县| 仁布县| 密山市| 东港市| 买车| 金昌市| 浮梁县| 阜宁县| 金华市| 新野县| 邯郸市| 栖霞市| 藁城市| 红桥区| 武宁县| 虹口区| 阿尔山市| 凌云县| 蓬安县| 廉江市| 永春县| 台湾省| 延庆县| 五大连池市| 济宁市| 浠水县| 平湖市| 莱阳市| 烟台市| 望江县| 纳雍县| 巧家县| 富阳市| 永顺县| 康乐县| 抚顺市| 宕昌县| 成安县| 青铜峡市|