天天看點

【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置

本文将探索Spring中的<code>@Profile注解,可以實作不同環境(開發、測試、部署等)使用不同的配置。同樣,除了使用注解也會給出基于XML配置的示例作為對比。</code>

假設你有一個應用涉及資料庫互動,你可能希望在開發環境上使用mysql資料庫,在生産環境上使用oracle資料庫,那麼使用Spring的<code>Profiles</code>,可以輕松達到這個目的,接下來我們将給出一個執行個體詳細介紹這種情況。

Spring 4.0.6.RELEASE

Maven 3

JDK 1.6

Eclipse JUNO Service Release 2

【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置

Spring配置類是指用<code>@Configuration</code>注解标注的類,這些類包含了用<code>@Bean</code>标注的方法。這些被<code>@Bean</code>标注的方法可以生成bean并交由spring容器管理。

【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置

以上配置隻有一個屬性被自動注入,接下來我們将展示這個dataSource屬性可以根據不同的環境(開發環境或生産環境)注入不同的bean。

【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置

一個簡單的接口,可以被所有可能的環境配置實作

【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置

以上兩個配置類都實作了DatabaseConfig接口,特殊的地方在于它們都用<code>@Profile</code>标注。

<code>被@Profile</code>标注的元件隻有當指定profile值比對時才生效。

可以通過以下方式設定profile值:

1、設定<code>spring.profiles.active</code>屬性(通過JVM參數、環境變量或者web.xml中的Servlet context參數)

2、ApplicationContext.getEnvironment().setActiveProfiles(“ProfileName”)

根據你的實際環境設定profile值,然後被profile标注(而且value=設定值)的bean才會被注冊到spring容器。

【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置

注意以上代碼,<code>context.scan(</code><code>"com.websystique.spring"</code><code>)</code>掃描到該包并開始注冊所有被@Component标注的bean時,如果同時遇到被@Profile注解标注的bean時,會與profile值做比較,profile值比對則注冊到spring容器,否則直接跳過。

在我們這個例子中,DevDatabaseConfig會被注冊到Spring容器中。

運作以上程式,結果如下:

替換DevelopmentDatabaseConfig配置為dev-config-context.xml (<code>src/main/resources/dev-config-context.xml</code>)

【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置

替換ProductionDatabaseConfig配置為prod-config-context.xml (<code>src/main/resources/prod-config-context.xml</code>)

【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置

替換AppConfig配置為app-config.xml (<code>src/main/resources/app-config.xml</code>)

【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置

根據實際的profile配置,相應的config-context.xml檔案會被加載,其它的會被忽略。

最後,main方法如下:

【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置
【譯】Spring 4 @Profile注解示例涉及技術及開發工具工程目錄結構步驟一:往pom.xml中添加依賴步驟二:建立Spring配置類步驟三:運作main方法測試附:基于XML的配置

運作程式,會得到相同的結果。

本文轉自風一樣的碼農部落格園部落格,原文連結:http://www.cnblogs.com/chenpi/p/6213849.html,如需轉載請自行聯系原作者