2015-03-03 162 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

相关问题