Spring中@PropertySource注解使用場景解析
一、簡單介紹
在日常開發(fā)中,你有沒有遇到過這樣一種場景:項目中需要編寫很多配置文件,將一些系統(tǒng)信息配置化
此時,往往需要編寫專門的工具類或者方法來讀取并解析這些配置文件,將配置文件中的配置項內(nèi)容加載到系統(tǒng)內(nèi)存中。
后續(xù)在使用這些配置項時,可以直接通過工具類或者方法獲取加載到內(nèi)存中的配置項。
@PropertySource注解就是Spring中提供的一個可以加載配置文件的注解,并且可以將配置文件中的內(nèi)容存放到Spring的環(huán)境變量中。
二、注解說明
@PropertySource注解是Spring中提供的一個通過指定配置文件位置來加載配置文件的注解,并且可以將配置文件中的內(nèi)容存放到Spring的環(huán)境變量中。
除了可以通過Spring的環(huán)境變量讀取配置項之外,還可以通過@Value注解獲取配置項的值。
另外,Spring中還提供了一個@PropertySources注解,在@PropertySources注解中,可以引入多個@PropertySource注解。
1. 注解源碼
Spring中提供了@PropertySource和@PropertySources兩個注解來加載配置文件。
① @PropertySource注解
@PropertySource注解只能標(biāo)注到類上,能夠通過指定配置文件的位置來加載配置文件,@PropertySource注解除了可以加載properties配置文件外,也可以加載xml配置文件和yml配置文件。如果加載yml配置文件時,可以自定義PropertySourceFactory實現(xiàn)yml配置文件的解析操作。
@PropertySource注解的源碼詳見:
/** * @author Chris Beams * @author Juergen Hoeller * @author Phillip Webb * @author Sam Brannen * @since 3.1 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Repeatable(PropertySources.class) public @interface PropertySource { String name() default ""; String[] value(); /** * @since 4.0 */ boolean ignoreResourceNotFound() default false; /** * @since 4.3 */ String encoding() default ""; /** * @since 4.3 */ Class<? extends PropertySourceFactory> factory() default PropertySourceFactory.class; }
從源碼可以看出,@PropertySource注解是從Spring3.1版本開始提供的注解,注解中各個屬性的含義如下所示:
- name:表示加載的資源的名稱,如果為空,則會根據(jù)加載的配置文件自動生成一個名稱。
- value:表示加載的資源的路徑,這個路徑可以是類路徑,也可以是文件路徑。
- ignoreResourceNotFound:表示當(dāng)配置文件未找到時,是否忽略文件未找到的錯誤。默認值為false,也就是說當(dāng)未找到配置文件時,Spring啟動就會報錯。
- encoding:表示解析配置文件使用的字符集編碼。
- factory:表示讀取對應(yīng)配置文件的工廠類,默認的工廠類是PropertySourceFactory。
② @PropertySources注解
除了@PropertySource注解,Spring中還提供了一個@PropertySources注解。
/** * @author Phillip Webb * @since 4.0 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface PropertySources { PropertySource[] value(); }
從源碼可以看出,@PropertySources是從Spring4.0版本開始提供的注解,在@PropertySources注解中,只提供了一個PropertySource數(shù)組類型的value屬性。
所以,@PropertySources注解可以引入多個@PropertySource注解。
2. 注解使用場景
在基于Spring的注解開發(fā)項目的過程中,由于不再使用Spring的XML文件進行配置,如果將配置項直接寫到類中,就會造成配置項與類的緊耦合,后續(xù)對于配置項的修改操作非常不方便,不利于項目的維護和擴展。
此時,可以將這些配置項寫到properties文件或者yml文件中,通過@PropertySource注解加載配置文件。
另外,如果項目本身就存在大量的properties配置文件或者yml配置文件,也可以統(tǒng)一由Spring的@PropertySource注解進行加載。
3. 使用案例
本節(jié),主要實現(xiàn)一個通過@PropertySource注解加載properties配置文件,將properties配置文件中的配置項加載到Spring的環(huán)境變量中,獲取Spring環(huán)境變量中配置項的值,并進行打印。
案例的具體實現(xiàn)步驟如下所示。
(1)新增test.properties文件
resources目錄下新增test.properties文件,文件內(nèi)容如下所示:
name=lwk age=18
(2)新增PropertySourceConfig類
@Configuration @PropertySource(value = "classpath:test.properties") public class PropertySourceConfig { }
可以看到,PropertySourceConfig類是Spring的配置類,并且使用@PropertySource注解指定了test.properties配置文件的路徑。
(3)新增PropertySourceTest類
public class PropertySourceTest { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PropertySourceConfig.class); ConfigurableEnvironment environment = context.getEnvironment(); System.out.println(environment.getProperty("name") + " ====>>> " + environment.getProperty("age")); } }
可以看到,在PropertySourceTest類的main()方法中,通過AnnotationConfigApplicationContext類的對象獲取到ConfigurableEnvironment類型的環(huán)境變量對象environment,然后通過environment對象獲取配置文件中的name和age的值并進行打印。
(4)運行PropertySourceTest類
可以看到,正確的輸出了配置文件中的值。
lwk ====>>> 18
說明:使用@PropertySource注解可以加載properties配置文件中的配置項,并將配置項加載到Spring的環(huán)境變量中,通過Spring的環(huán)境變量就可以獲取到配置項的值。
到此這篇關(guān)于Spring中@PropertySource注解使用場景解析的文章就介紹到這了,更多相關(guān)Spring的@PropertySource注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA的spring項目使用@Qualifier飄紅問題及解決
這篇文章主要介紹了IDEA的spring項目使用@Qualifier飄紅問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11application.yaml與bootstrap.yaml的使用
這篇文章主要介紹了application.yaml與bootstrap.yaml的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08idea快速找到項目中對應(yīng)的類圖文詳解(包括源碼)
用IDEA開發(fā)Java項目時經(jīng)常會使用到各種快捷鍵,其中搜索是最常用的之一,下面這篇文章主要給大家介紹了關(guān)于idea如何快速找到項目中對應(yīng)的類(包括源碼)的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-06-06SpringBoot自定義定時任務(wù)的實現(xiàn)示例
本文主要介紹了SpringBoot自定義定時任務(wù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05Spring Data Jpa實現(xiàn)分頁和排序代碼實例
本篇文章主要介紹了Spring Data Jpa實現(xiàn)分頁和排序代碼實例,具有一定的參考價值,有興趣的可以了解一下。2017-03-03