Java如何讀取配置文件并賦值靜態(tài)變量
應(yīng)用場(chǎng)景
項(xiàng)目開(kāi)發(fā)中某個(gè)功能需要抽取成方法寫(xiě)成一個(gè)工具類(lèi),提供給別人使用。寫(xiě)過(guò)工具類(lèi)的人都知道,工具類(lèi)中的方法一般都是靜態(tài)方法,可以直接使用類(lèi)名點(diǎn)方法名調(diào)用,
使用很方便,比如判斷某個(gè)對(duì)象是否為null的方式Objects.equals().由于我寫(xiě)的這個(gè)工具類(lèi)中需要讀取配置文件中的內(nèi)容,可是常規(guī)方式注入成員變量時(shí)都不是靜態(tài)的,不
能直接調(diào)用,比如這種方式:
@Data
@Component
public class GBaseApiConfig {
@Value("${gbase.api.prefix}")
private String gbaseApi;
}
工具類(lèi)中的靜態(tài)方法直接調(diào)用這種方式注入的成員變量會(huì)出現(xiàn)空指針異常,因?yàn)镴ava中的語(yǔ)法規(guī)定靜態(tài)的方法只能調(diào)用靜態(tài)的方法或者是成員變量,否則會(huì)報(bào)錯(cuò)如下:

想在靜態(tài)方法中使用其他非靜態(tài)的成員變量或者是方法只能通過(guò)創(chuàng)建對(duì)象的方式來(lái)調(diào)用,可是工具類(lèi)中不可能這么干,不然就失去工具類(lèi)的意義了。于是想到
如下方法
方法一
通過(guò)靜態(tài)代碼塊來(lái)讀取、加載配置文件中的內(nèi)容,代碼如下

先定義一個(gè)靜態(tài)的成員變量,然后在靜態(tài)代碼塊中讀取需要的配置文件信息,在給靜態(tài)變量賦值。這種方式親自測(cè)試完全可用。
方法二
可是過(guò)了一段時(shí)間后,項(xiàng)目經(jīng)理讓我們修改代碼,原因是希望項(xiàng)目中的代碼風(fēng)格統(tǒng)一,全部都使用@Value注解注入的方式。
很快一個(gè)同事就找到一個(gè)可行的辦法,代碼如下

實(shí)現(xiàn)spring中的InitializingBean接口,然后重寫(xiě)afterPropertiesSet方法即可。實(shí)現(xiàn)方式為先將配置文件中的值注入到一個(gè)成員變量中,然后通過(guò)方法
afterPropertiesSet實(shí)現(xiàn)工具類(lèi)的初始化,這樣就可以將配置文件中的信息注入到工具類(lèi)中。測(cè)試可用。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用@Slf4j和logback-spring.xml搭建日志框架
這篇文章主要介紹了如何使用@Slf4j和logback-spring.xml搭建日志框架問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
java 中序列化NotSerializableException問(wèn)題解決辦法
這篇文章主要介紹了java 中序列化NotSerializableException問(wèn)題解決辦法的相關(guān)資料,這里對(duì)序列化問(wèn)題進(jìn)行描述說(shuō)明,并提供解決辦法,希望能幫助到大家,需要的朋友可以參考下2017-08-08
Java多線程知識(shí)點(diǎn)全面總結(jié)
這篇文章主要介紹了Java多線程知識(shí)點(diǎn)全面總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
SpringCloud組件OpenFeign之?dāng)r截器解讀
這篇文章主要介紹了SpringCloud組件OpenFeign之?dāng)r截器用法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Spring Cloud Gateway組件的三種使用方式實(shí)例詳解
Spring Cloud Gateway是 Spring 官方基于 Spring5.0 、 SpringBoot2.0 和 Project Reactor 等技術(shù)開(kāi)發(fā)的網(wǎng)關(guān)旨在為微服務(wù)框架提供一種簡(jiǎn)單而有效的統(tǒng)一的API 路由管理方式,統(tǒng)一訪問(wèn)接口,這篇文章主要介紹了Spring Cloud Gateway組件的三種使用方式,需要的朋友可以參考下2024-01-01
Java的中l(wèi)ombok下的@Builder注解用法詳解
這篇文章主要介紹了Java的中l(wèi)ombok下的@Builder注解用法詳解,lombok注解在java進(jìn)行編譯時(shí)進(jìn)行代碼的構(gòu)建,對(duì)于java對(duì)象的創(chuàng)建工作它可以更優(yōu)雅,不需要寫(xiě)多余的重復(fù)的代碼,在出現(xiàn)lombok之后,對(duì)象的創(chuàng)建工作更提供Builder方法,需要的朋友可以參考下2023-11-11
spring中@Autowire和@Resource的區(qū)別在哪里(推薦)
這篇文章主要介紹了spring中@Autowire和@Resource的區(qū)別在哪里?本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
POI對(duì)Excel自定義日期格式的讀取(實(shí)例代碼)
下面小編就為大家?guī)?lái)一篇POI對(duì)Excel自定義日期格式的讀取(實(shí)例代碼)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
Java 判斷實(shí)體對(duì)象及所有屬性是否為空的操作
這篇文章主要介紹了Java 判斷實(shí)體對(duì)象及所有屬性是否為空的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12

