彈簧特性

1.概述

本教程將展示如何通過XML或Java配置在Spring中設置和使用屬性

在Spring 3.1之前 ,將新的屬性文件添加到Spring并使用屬性值并不像它那樣靈活和健壯。 從Spring 3.1開始 ,新的EnvironmentPropertySource抽象大大簡化了此過程。

2.通過XML名稱空間注冊屬性

使用XML,可以通過以下命名空間元素使Spring訪問新的屬性文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"><context:property-placeholder location="classpath:foo.properties" /></beans>

foo.properties文件應放在/ src / main / resources下,以便在運行時可在類路徑上使用。

多個

如果在Spring上下文中存在多個<property-placeholder>元素 ,則應遵循一些最佳實踐:

  • 需要指定order屬性來固定Spring處理這些訂單的順序
  • 所有屬性占位符減去最后一個(最高順序 )應具有ignore-unresolvable =“ true”,以允許解析機制在上下文中傳遞給其他對象而不會引發異常

3.通過Java注釋注冊屬性

Spring 3.1還引入了新的@PropertySource批注 ,作為將屬性源添加到環境的便捷機制。 該注釋將與基于Java的配置和@Configuration注釋一起使用:

@Configuration
@PropertySource("classpath:foo.properties")
public class PropertiesWithJavaConfig {@Beanpublic static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {return new PropertySourcesPlaceholderConfigurer();}
}

與使用XML名稱空間元素相反,Java @PropertySource批注不會自動向Spring注冊PropertySourcesPlaceholderConfigurer 。 相反,必須在配置中顯式定義Bean,以使屬性解析機制正常工作。 此意外行為背后的原因是設計使然,并對此問題進行了記錄 。

4.使用屬性

在Spring 3.1中添加的較舊的PropertyPlaceholderConfigurer和新的PropertySourcesPlaceholderConfigurer都可以在bean定義屬性值和@Value批注中解析$ {…}占位符

例如,要使用@Value注釋注入屬性:

@Value( "${jdbc.url}" )
private String jdbcUrl;

還可以指定屬性的默認

@Value( "${jdbc.url:aDefaultUrl}" )
private String jdbcUrl;

在Spring XML配置中使用屬性:

<bean id="dataSource"><property name="url" value="${jdbc.url}" />
</bean>

最后,通過新的環境API獲取屬性:

@Autowired
private Environment env;
...
dataSource.setUrl(env.getProperty("jdbc.url"));

一個非常重要的警告是,使用<property-placeholder> 不會將屬性公開給Spring Environment –這意味著檢索這樣的值將不起作用–它將返回null

env.getProperty("key.something")

4.1屬性搜索優先級

默認情況下,在Spring 3.1中,本地屬性在所有環境屬性源(包括屬性文件)之后排在最后。 可以通過PropertySourcesPlaceholderConfigurerlocalOverride屬性來覆蓋此行為,可以將其設置為true以允許本地屬性覆蓋文件屬性。

在Spring 3.0及更低版本中,舊的PropertyPlaceholderConfigurer也嘗試在手動定義的源以及系統屬性中查找屬性。 還可以通過配置程序的systemPropertiesMode屬性自定義查找優先級:

  • 從不 –從不檢查系統屬性
  • 備用 (默認)–檢查系統屬性,如果在指定的屬性文件中無法解析
  • 覆蓋 –在嘗試指定的屬性文件之前,請先檢查系統屬性。 這允許系統屬性覆蓋任何其他屬性源。

最后,請注意,如果在通過@PropertySource定義的兩個或多個文件中定義了屬性,則最后一個定義將獲勝并覆蓋之前的定義 。 這使得確切的屬性值難以預測,因此,如果覆蓋很重要,則可以使用PropertySource API。

5.幕后–Spring配置

5.1。 在Spring 3.1之前

Spring 3.1引入了使用注釋定義屬性源的便捷選項–但在此之前,必須使用XML Configuration。

<context:property-placeholder> XML元素自動在Spring上下文中注冊一個新的PropertyPlaceholderConfigurer bean 。 為了向后兼容,如果XSD架構尚未升級為指向新的3.1 XSD版本,則在Spring 3.1中也是如此。

5.2。 在Spring 3.1之后

從Spring 3.1開始,XML <context:property-placeholder>將不再注冊舊的PropertyPlaceholderConfigurer,而是新注冊的PropertySourcesPlaceholderConfigurer 。 創建此替換類是??為了更靈活并更好地與新引入的Environment and PropertySource機制進行交互。

對于使用Spring 3.1或更高版本的應用程序,應將其視為標準。

6.在Spring 3.0中使用Raw Bean進行配置–

除了將屬性放入Spring(注釋和XML名稱空間)的便捷方法之外,還可以手動定義和注冊屬性配置bean。 使用PropertyPlaceholderConfigurer使我們可以完全控制配置,但缺點是過于冗長,并且在大多數情況下是不必要的。

6.1。 Java配置

@Bean
public static PropertyPlaceholderConfigurer properties(){PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();Resource[] resources = new ClassPathResource[ ]{ new ClassPathResource( "foo.properties" ) };ppc.setLocations( resources );ppc.setIgnoreUnresolvablePlaceholders( true );return ppc;
}

6.2。 XML配置

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><list><value>classpath:foo.properties</value></list></property><property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>

7.在Spring 3.1中使用Raw Bean進行配置–

同樣,在Spring 3.1中,也可以手動配置新的PropertySourcesPlaceholderConfigurer

7.1。 Java配置

@Bean
public static PropertySourcesPlaceholderConfigurer properties(){PropertySourcesPlaceholderConfigurer pspc =new PropertySourcesPlaceholderConfigurer();Resource[] resources = new ClassPathResource[ ]{ new ClassPathResource( "foo.properties" ) };pspc.setLocations( resources );pspc.setIgnoreUnresolvablePlaceholders( true );return pspc;
}

7.2。 XML配置

<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"><property name="location"><list><value>classpath:foo.properties</value></list></property><property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>

8.結論

本文展示了幾個在Spring中使用屬性和屬性文件的示例 ,并討論了舊的Spring 3.0選項以及Spring 3.1中引入的對屬性的新支持。

可以在github項目中找到所有注冊屬性文件和使用屬性值的示例的實現–這是一個基于Eclipse的項目,因此應該很容易直接導入和運行。

參考:來自bakgung博客的JCG合作伙伴 Eugen Paraschiv 提供的Spring屬性 。

翻譯自: https://www.javacodegeeks.com/2012/02/properties-with-spring.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373243.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373243.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php-cgi cpu很高,php-cgi占用cpu資源過高的解決方法

轉的網上的&#xff0c;不過對PHP-CGI菜鳥的人&#xff0c;還是有點幫助的。1. 一些php的擴展與php版本兼容存在問題&#xff0c;實踐證明 eAccelerater與某些php版本兼容存在問題&#xff0c;具體表現時啟動php-cgi進程后&#xff0c;運行10多分鐘&#xff0c;奇慢無比&#x…

《做中學》讀后有感

《做中學》讀后有感 最近讀了婁老師的“做中學”系列文章&#xff0c;有很大感觸&#xff0c;今天想著重談一談我在學習方面收到的啟發。 如何成功get一項技能 如果問到“如何開始get一項技能”&#xff0c;我想我們應該是最有發言權的一代。從小就被爸爸媽媽引導著參加各種課外…

多表之間關聯查詢

內連接 jion on 自連接 本表進行內連接的查詢形式 外鏈接&#xff1a; 左鏈接 寫法&#xff1a;select 字段 from 表1 t left join 表2 s on t.字段1 s.字段1 where 條件 或者 作用&#xff1a;保證左邊的表的數據全部顯示&#xff0c;包括空的 右鏈接 寫法 &#xff1a;sele…

php文件夾0777,PHP代碼mkdir(‘images’,’0777′)創建一個具有411權限的文件夾!為什么?...

我發誓這是昨天的工作.然而,現在下面的代碼破壞文件夾沒有問題,但創建一個具有411權限的新文件夾應該是777.我的代碼昨天這樣做.這樣做的目的是壓縮文件夾,傳遞文件夾,刪除圖像,然后為圖像創建新目錄.有人能告訴我我做錯了什么或我應該做什么&#xff1f;謝謝function delete_d…

調查HashDoS問題

近一個月前&#xff0c;我就如何在不與供應商互動的情況下臨時解決 28C3上出現的HashDoS問題或其他代碼缺陷發表了一些想法。 現在是時候更深入地研究復雜性攻擊并查看來源了。 我完全假設java.util.HashMap和java.util.Hashtable是受此攻擊影響的最常用的Java數據結構&#xf…

Linq 和 EF Contains示例

List<int> unitIDListnew List<int>(); //此處添加int元素 var query DB.ElecConsumers.Where(c > unitIDList.Contains(c.ParentUnitID)); //EF方式 var query1 (from c in DB.ElecConsumers where unitIDList.Contains(c.ParentUnitID ) select c); //Linq方…

date 顯示或設置系統時間和日期

顯示或設置系統時間和日期 date [options] [format] date [options] [new date] date用來顯示系統的時間和日期&#xff0c;超級用戶可以使用date來更改系統時鐘 選項 %H 小時&#xff0c;24小時制&#xff08;00~23&#xff09; %I 小時&#xff0c;12小時制&#xff…

Java 7:WatchService

在Java 7的所有新功能中&#xff0c;更有趣的是WatchService&#xff0c;它增加了監視目錄更改的功能。 WatchService直接映射到本機文件事件通知機制&#xff08;如果有&#xff09;。 如果本機事件通知機制不可用&#xff0c;則默認實現將使用輪詢。 結果&#xff0c;響應性&…

做一件事情的3個關鍵指標:興趣、能力和回報

最近突然有了一點新的感悟&#xff0c;在原有的認識基礎之上。關于找工作&#xff0c;大家說的最多的&#xff0c;根據自己的“興趣”和“能力”。我覺得這是不夠的&#xff0c;還應該加上一個“回報”。興趣&#xff1a;對一件事有沒有愿望去嘗試&#xff0c;側重“好奇心”。…

iOS應用內支付(IAP)詳解

在iOS開發中如果涉及到虛擬物品的購買&#xff0c;就需要使用IAP服務&#xff0c;我們今天來看看如何實現。 在實現代碼之前我們先做一些準備工作&#xff0c;一步步來看。 1、IAP流程 IAP流程分為兩種&#xff0c;一種是直接使用Apple的服務器進行購買和驗證&#xff0c;另一種…

vagrant box php,vagrant box php開發環境配置 -- nginx

centos7.3 直接用yum安裝nginx的版本是1.10.2&#xff0c;當前的最新穩定版是1.10.3&#xff0c;暫時不更新&#xff0c;直接安裝yum安裝nginxsudo yum install -y nginx測試nginx -t啟動sudo service nginx startps -ef|grep nginxcurl -i localhost在virtualbox設置網絡的端口…

使用ASM 4處理Java類文件–第二部分:Tree API

什么是ASM樹API&#xff1a; ASM樹API是ASM的一部分&#xff0c;可讓您創建/修改內存中的類。 該類被視為信息樹。 像整個類一樣&#xff0c;它是ClassNode的實例&#xff0c;其中包含FieldNode對象列表&#xff0c;MethodNode對象列表等。本文假設讀者已經在這里閱讀了第一部分…

php 去除 html 屬性,用PHP 去掉所有html標簽里的部分屬性

用PHP 去掉所有html標簽里的部分屬性http://zhidao.baidu.com/question/418471924.html用PHP 去掉所有html標簽里的部分屬性 tppabsset_time_limit(0);function view_dir($dir){$dpopendir($dir); //打開目錄句柄//echo "".$dir."";$path2;while ($file r…

在Windows上安裝Elasticsearch 5.0

在windows上安裝Elasticsearch Elasticsearch可以使用.zip軟件包安裝在Windows上。 elasticsearch-service.bat命令&#xff0c;它將設置Elasticsearch作為服務運行。 Elasticsearch的最新穩定版在Download Elasticsearch下載&#xff0c;其他的版本在Past Releases page下載。…

Java EE 6示例– Galleria

您是否一直想知道在哪里可以找到使用Java EE 6構建的良好端到端示例&#xff1f; 我有。 您在網上找到的大多數東西都是非常基礎的&#xff0c;不能解決現實世界中的問題。 Java EE 6教程就是這樣。 所有其他內容&#xff0c;例如Adam Bien所發表的大多數內容&#xff0c;都是范…

二維有限體積 matlab,二維有限體積法計算熱傳導及源碼.pdf

二維有限體積法計算熱傳導及源碼//#include "stdafx.h"#include #include #include #include #include using namespace std;#define q 500#define k 1000void main (){ //input the value you want:double L,dx,dy,T,Ax,Ay,d;int m,n,i,j,kk,mm ;//char str1[20];ch…

ubuntu與win10互換硬盤

實例&#xff1a;將sdb上的ubuntu轉移至sda&#xff0c;將sda上的win轉移至sdb1. 備份資料2. 制作老毛桃PE盤3. 格式化sda4. dd if/dev/sdb of/dev/sda ,將sdb克隆到sda上5. 利用Linux live cd修復grub2&#xff08;BIOS不會認GPT分區&#xff09; sudo grub-install /dev/sda …

如何在Jetty中使用SPDY

SPDY是Google提出的一種新協議&#xff0c;是針對網絡的新協議。 SPDY與HTTP兼容&#xff0c;但嘗試通過壓縮&#xff0c;多路復用和優先級降低網頁負載。準確地說&#xff0c;快速的目標是&#xff1a;&#xff08; http://dev.chromium.org/spdy/spdy-whitepaper &#xff09…

虐殺外星人java,逆天游戲《毀滅全人類2》登PS4 外星人瘋狂虐殺地球人

逆天游戲《毀滅全人類2》登PS4 外星人瘋狂虐殺地球人2016-10-17 10:45:58來源&#xff1a;游戲下載編輯&#xff1a;小年青評論(0)廣大的小伙伴都有看過許多外星人企圖入侵毀滅地球的電影&#xff0c;已此為題材而開發的游戲也不在少數。近日泛歐洲游戲信息組織又為一款該種題材…

電腦快捷鍵大全

最常用的快捷鍵F5------刷新 DELETE-----刪除 TAB----改變焦點CTRLC-----復制 CTRLX-----剪切 CTRLV----粘貼CTRLA-----全選 CTRLZ-----撤銷 CTRLS-----保存 ALTF4-----關閉 CTRLY-----恢復 ALTTAB-----切換CTRLF5---強制刷新…