2015-03-03 212 views
0

,我有以下豆在我contexs:兩個bean具有相同名稱在不同的上下文

<!-- Context 1 --> 
<beans profile="ldap"> 
     <bean id="activeDirectoryAuthProvider" class="com.production.ActiveDirectoryLdapAuthenticationProvider"> 
      <constructor-arg value="${ldap.login.provider.domain}"/> 
      <constructor-arg value="${ldap.login.provider.url}" /> 
      <property name="useAuthenticationRequestCredentials" value="true" /> 
      <property name="convertSubErrorCodesToExceptions" value="true" /> 
     </bean> 
</beans> 

<!-- Context 2 --> 

    <bean id="activeDirectoryAuthProvider" class="com.test.TestActiveDirectoryLdapAuthenticationProvider"> 
     <constructor-arg value="${ldap.login.provider.domain}"/> 
     <constructor-arg value="${ldap.login.provider.url}" /> 
     <property name="useAuthenticationRequestCredentials" value="true" /> 
     <property name="convertSubErrorCodesToExceptions" value="true" /> 
    </bean> 

我的目標是使用第一個bean只爲量產版另一個用於測試目的。

即我開始測試基於生產上下文我期望生產bean將被測試bean替換爲所需的配置。

但不幸的是,當我試圖創建兩個具有相同名稱的bean時,只有生產bean被創建,而另一個被忽略。另一件事,我注意到,當我試圖將測試bean名稱更改爲:activeDirectoryAuthProvider1然後這兩個bean都成功創建。任何人都可以解釋爲什麼會發生,並建議可能的解決方案如何繞過它?

回答

0

您需要在開發和生產中使用不同的上下文。在每種情況下,您只定義相關的bean(即只有一個具有特定名稱的bean)。如果你使用maven,你可以把src/test/resources下的測試/開發環境和src/main/resources下的生產環境放在一起。如果你不使用maven,還有其他方法。你可以在這裏找到一個例子:http://mrhaki.blogspot.it/2009/02/use-spring-configurator-to-support.html

+0

是的,我們已經使用了兩種不同的上下文,即測試環境包括生產環境。最初的想法是使用除dataSource之類的幾個bean之外的所有生產bean ...以避免在項目周圍重複使用bean。 – fashuser 2015-03-03 11:12:13

+0

應該可以有3個配置文件: 文件1:僅生產豆 文件2:僅開發豆 文件3:共享豆(開發和生產) – Giovanni 2015-03-03 12:41:42

0

看看春天配置文件你可以有一個測試和一個產品。

<beans profile="test"> 
    <!-- Context 1 --> 

      <bean id="activeDirectoryAuthProvider" class="com.production.ActiveDirectoryLdapAuthenticationProvider"> 
      <constructor-arg value="${ldap.login.provider.domain}"/> 
      <constructor-arg value="${ldap.login.provider.url}" /> 
      <property name="useAuthenticationRequestCredentials" value="true" /> 
      <property name="convertSubErrorCodesToExceptions" value="true" /> 
      </bean> 
</beans> 

<beans profile="prod"> 
     <!-- Context 2 --> 

     <bean id="activeDirectoryAuthProvider" class="com.test.TestActiveDirectoryLdapAuthenticationProvider"> 
      <constructor-arg value="${ldap.login.provider.domain}"/> 
      <constructor-arg value="${ldap.login.provider.url}" /> 
      <property name="useAuthenticationRequestCredentials" value="true" /> 
      <property name="convertSubErrorCodesToExceptions" value="true" /> 
     </bean> 
</beans> 

您可以通過各種方式設置活動配置文件。檢查文檔。

+0

感謝您的回答,但不幸的是它不適合我們。我忘了補充問題,我們已經使用春天分析(問題已更新)。即最初的想法是有默認和ldap配置文件,以便在登錄策略之間進行切換。我們還計劃在集成測試中指定@ActiveProfile(「ldap」)來選擇所需的策略。 – fashuser 2015-03-03 11:03:07

相關問題