使用Spring靜態(tài)注入實(shí)現(xiàn)讀取配置工具類新方式
Spring靜態(tài)注入實(shí)現(xiàn)讀取配置工具類
Spring靜態(tài)注入的核心首先是需要是一個(gè)Bean,才可以從Spring上下文中注入Bean,下例中environment是需要Autowired注入的Bean,之所以選擇Environment是因?yàn)樗蠸pring已經(jīng)加載好的屬性配置,直接拿來(lái)用比從文件中讀取更優(yōu)雅,從文件中讀取需要面臨jar包外部配置問(wèn)題,暫時(shí)未找到較好解決辦法。
@PostConstruct修飾的方法會(huì)在服務(wù)器加載Servlet的時(shí)候運(yùn)行,并且只會(huì)被服務(wù)器執(zhí)行一次。此處把PropertiesUtils被Spring實(shí)例化的Bean賦值給靜態(tài)變量tool,后續(xù)可以通過(guò)tool使用實(shí)例化好的PropertiesUtils的Bean。
getProperty作為根據(jù)key獲取指的靜態(tài)方法,實(shí)現(xiàn)獲取配置屬性。
核心代碼
@Component
public class PropertiesUtils {
private static PropertiesUtils tool;
@Autowired
private Environment environment;
public static String getProperty(String property) {
return tool.environment.getProperty(property);
}
@PostConstruct
public void init() {
tool = this;
tool.environment = this.environment;
}
}
實(shí)現(xiàn)Starter關(guān)鍵步驟——配置類,自動(dòng)配置PropertiesUtils的Bean
public class AutoConfig {
? ? @Bean
? ? private PropertiesUtils propertiesUtils() {
? ? ? ? return new PropertiesUtils();
? ? }
}實(shí)現(xiàn)Starter關(guān)鍵步驟——在resources的創(chuàng)建META-INF文件夾,創(chuàng)建spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.AutoConfig
拓展
Environment :
- Spring 為運(yùn)行環(huán)境提供的高度抽象接口,項(xiàng)目運(yùn)行中的所有相關(guān)配置都基于此接口,用來(lái)表示整個(gè)應(yīng)用運(yùn)行時(shí)的環(huán)境。
- 該接口繼承自PropertyResolver,而PropertyResolver規(guī)范了解析底層任意property資源,也就意味著application.properties是由PropertyResolver管理。
- PropertyResolver提供了方法getProperty(String key),該方法通過(guò)傳入properties文件中定義的key,返回與給定鍵關(guān)聯(lián)的屬性值。

Spring兩種方式注入到靜態(tài)工具類里
需要注意的是下邊的兩個(gè)方法都需要工具類創(chuàng)建實(shí)例的時(shí)候才會(huì)注入。所以不建議在工具類注入實(shí)例。因?yàn)橐话愎ぞ哳惗际侵苯油ㄟ^(guò)類來(lái)使用的。
直接上代碼
方式1
//可以換成@Configuration,與@Inject配合使用
@Componentpublic?
class XXUtils {?
? ? ? ? //可以換成@Inject/ @Autowired
? ? ? ?@Resource
? private XXXProperties xxxPropertiesAutowired;??
? private static XXXProperties xxxProperties;??
? ? ? ?@PostConstruct?
? ? ? ?public void init() {
? ? ? ? ? ? ? this.xxxPropertiesAutowired = xxxProperties;
? ? ? ?}
}方式2:zs
@Component
public class UrlUtil {
? ? ?private static RRJConfig rrjConfig;
? ? @Autowired
? ? public void setRRJConfig(RRJConfig rRJConfig) {
? ? UrlUtil.rrjConfig = rRJConfig;
? ? }以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringData關(guān)鍵字查詢實(shí)現(xiàn)方法詳解
這篇文章主要介紹了SpringData關(guān)鍵字查詢實(shí)現(xiàn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
java接口私有方法實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了java接口私有方法實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
MyBatis批量插入數(shù)據(jù)的三種方法實(shí)例
由于項(xiàng)目需要生成多條數(shù)據(jù),并保存到數(shù)據(jù)庫(kù)當(dāng)中,項(xiàng)目使用了Spring+MyBatis,所以打算使用MyBatis批量插入,應(yīng)該要比循環(huán)插入的效果更好,下面這篇文章主要給大家介紹了關(guān)于MyBatis批量插入數(shù)據(jù)的三種方法,需要的朋友可以參考下2021-10-10
RabbitMQ死信機(jī)制實(shí)現(xiàn)延遲隊(duì)列的實(shí)戰(zhàn)
本文主要介紹了RabbitMQ死信機(jī)制實(shí)現(xiàn)延遲隊(duì)列的實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
java實(shí)現(xiàn)微信點(diǎn)餐申請(qǐng)微信退款
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微信點(diǎn)餐申請(qǐng)微信退款,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
Java并發(fā)編程之ConcurrentLinkedQueue隊(duì)列詳情
這篇文章主要介紹了Java并發(fā)編程之ConcurrentLinkedQueue隊(duì)列詳情,ConcurrentLinkedQueue?內(nèi)部的隊(duì)列使用單向鏈表方式實(shí)現(xiàn),下文更多相關(guān)內(nèi)容敘述需要的小伙伴可以參考一下2022-04-04
Spring Boot使用profile如何配置不同環(huán)境的配置文件
,springboot支持通過(guò)不同的profile來(lái)配置不同環(huán)境的配置,下面就大致介紹一下yml配置文件跟properties配置文件怎么使用profile配置不同環(huán)境的配置文件2018-01-01
java使用Jsoup連接網(wǎng)站超時(shí)的解決方法
jsoup是一個(gè)非常好的解析網(wǎng)頁(yè)的包,用java開發(fā)的,提供了類似DOM,CSS選擇器的方式來(lái)查找和提取文檔中的內(nèi)容,提取文檔內(nèi)容時(shí)會(huì)出現(xiàn)超時(shí)的情況,解決方法可看下文2013-11-11

