五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

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

分享到微博請遵守國家法律
宁河县| 天镇县| 钟山县| 楚雄市| 平陆县| 通渭县| 廉江市| 涞源县| 息烽县| 绿春县| 阜康市| 阿巴嘎旗| 拉孜县| 库伦旗| 湘乡市| 策勒县| 永宁县| 虎林市| 博白县| 罗山县| 韶关市| 松阳县| 武安市| 湘阴县| 渑池县| 大宁县| 偏关县| 泾源县| 汤原县| 曲松县| 顺平县| 德江县| 新乡市| 肇东市| 赤壁市| 新密市| 二连浩特市| 铜川市| 通州市| 文安县| 南部县|