使用Spring靜態(tài)注入實(shí)現(xiàn)讀取配置工具類(lèi)新方式
Spring靜態(tài)注入實(shí)現(xiàn)讀取配置工具類(lèi)
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)鍵步驟——配置類(lèi),自動(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)工具類(lèi)里
需要注意的是下邊的兩個(gè)方法都需要工具類(lèi)創(chuàng)建實(shí)例的時(shí)候才會(huì)注入。所以不建議在工具類(lèi)注入實(shí)例。因?yàn)橐话愎ぞ哳?lèi)都是直接通過(guò)類(lèi)來(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)鍵字查詢(xún)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了SpringData關(guān)鍵字查詢(xún)實(shí)現(xiàn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08java接口私有方法實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了java接口私有方法實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11MyBatis批量插入數(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-10RabbitMQ死信機(jī)制實(shí)現(xiàn)延遲隊(duì)列的實(shí)戰(zhàn)
本文主要介紹了RabbitMQ死信機(jī)制實(shí)現(xiàn)延遲隊(duì)列的實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11java實(shí)現(xiàn)微信點(diǎn)餐申請(qǐng)微信退款
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微信點(diǎn)餐申請(qǐng)微信退款,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09Java并發(fā)編程之ConcurrentLinkedQueue隊(duì)列詳情
這篇文章主要介紹了Java并發(fā)編程之ConcurrentLinkedQueue隊(duì)列詳情,ConcurrentLinkedQueue?內(nèi)部的隊(duì)列使用單向鏈表方式實(shí)現(xiàn),下文更多相關(guān)內(nèi)容敘述需要的小伙伴可以參考一下2022-04-04Spring Boot使用profile如何配置不同環(huán)境的配置文件
,springboot支持通過(guò)不同的profile來(lái)配置不同環(huán)境的配置,下面就大致介紹一下yml配置文件跟properties配置文件怎么使用profile配置不同環(huán)境的配置文件2018-01-01java使用Jsoup連接網(wǎng)站超時(shí)的解決方法
jsoup是一個(gè)非常好的解析網(wǎng)頁(yè)的包,用java開(kāi)發(fā)的,提供了類(lèi)似DOM,CSS選擇器的方式來(lái)查找和提取文檔中的內(nèi)容,提取文檔內(nèi)容時(shí)會(huì)出現(xiàn)超時(shí)的情況,解決方法可看下文2013-11-11