使用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)文章
SpringData關(guān)鍵字查詢實現(xiàn)方法詳解
這篇文章主要介紹了SpringData關(guān)鍵字查詢實現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08RabbitMQ死信機制實現(xiàn)延遲隊列的實戰(zhàn)
本文主要介紹了RabbitMQ死信機制實現(xiàn)延遲隊列的實戰(zhàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11Java并發(fā)編程之ConcurrentLinkedQueue隊列詳情
這篇文章主要介紹了Java并發(fā)編程之ConcurrentLinkedQueue隊列詳情,ConcurrentLinkedQueue?內(nèi)部的隊列使用單向鏈表方式實現(xiàn),下文更多相關(guān)內(nèi)容敘述需要的小伙伴可以參考一下2022-04-04Spring Boot使用profile如何配置不同環(huán)境的配置文件
,springboot支持通過不同的profile來配置不同環(huán)境的配置,下面就大致介紹一下yml配置文件跟properties配置文件怎么使用profile配置不同環(huán)境的配置文件2018-01-01