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

Spring兩種方式注入到靜態(tài)工具類里
需要注意的是下邊的兩個方法都需要工具類創(chuàng)建實例的時候才會注入。所以不建議在工具類注入實例。因為一般工具類都是直接通過類來使用的。
直接上代碼
方式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;
? ? }以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
elasticsearch數(shù)據(jù)信息索引操作action?support示例分析
這篇文章主要為大家介紹了elasticsearch數(shù)據(jù)信息索引操作action?support示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04
Java?Runnable和Thread實現(xiàn)多線程哪個更好你知道嗎
這篇文章主要為大家詳細介紹了Java?Runnable和Thread實現(xiàn)多線程哪個更好,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>2022-03-03
使用synchronized關(guān)鍵字實現(xiàn)信號量的方法
在Java中,信號量(Semaphore)是一種常用的同步工具,它可以用來控制對共享資源的訪問數(shù)量,下面,我們將使用Synchronized關(guān)鍵字來實現(xiàn)一個簡單的信號量,我們的目標(biāo)是實現(xiàn)一個計數(shù)信號量,其中信號量的計數(shù)指示可以同時訪問某一資源的線程數(shù),需要的朋友可以參考下2024-04-04
基于Java實現(xiàn)一個簡單的數(shù)據(jù)同步組件
這篇文章主要為大家詳細介紹了如何基于Java實現(xiàn)一個簡單的數(shù)據(jù)同步組件,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下2023-06-06
spring boot整合redis主從sentinel方式
這篇文章主要介紹了spring boot整合redis主從sentinel方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

