【问题标题】:Conditionally creating beans in spring在春季有条件地创建 bean
【发布时间】:2012-03-04 03:06:57
【问题描述】:

现在我正在使用 spring remoting 的 RMI/SOAP/JMS/Hessian/Burlap/HttpInvoker 导出器公开我的应用程序的服务层。我想要的是允许用户以某种方式定义他们希望启用哪些远程处理机制(而不是启用所有这些机制),然后只创建那些导出器 bean。

我希望 Spring 的应用程序上下文 xml 支持在部分 xml 周围放置条件块。然而,就我目前所见,标准 spring 发行版中没有任何内容可以让你做这样的事情。

还有其他方法可以实现我想要做的吗?

【问题讨论】:

  • 而且将配置放在不同的文件中并只加载您感兴趣的文件是不够的?
  • 删除了远程标签,因为与问题无关
  • 可能重复(或至少相关):stackoverflow.com/questions/29844271/…

标签: java spring deployment


【解决方案1】:

Spring 3.1 有 Profile 的概念。我的你可以使用它们。

【讨论】:

    【解决方案2】:

    我将假设您正在寻找基于您的环境来配置您的应用程序,例如...对于生产我想使用这个 bean,在 dev 这些其他...

    正如 Ralph 所说,从 Spring 3.1 开始你就有了配置文件......但关键是你明白你应该将基于环境的 bean 放在不同的配置文件中......这样你就可以拥有类似 dev-beans 的东西。 xml,prod-beans.xml ...然后在您的主spring文件中,然后您只需根据您使用的环境调用适当的文件...因此配置文件只是这样做的技术...但是您也可以使用其他技术,比如有一个系统环境变量,或者在你的构建中传递一个参数来决定你想要使用哪些 bean

    【讨论】:

      【解决方案3】:

      您可以通过使用 Spring @Configuration bean 来实现这一点,因此您可以在 java 代码中构建您的 bean。 (见http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-java

      @Configuration
      public class AppConfig {
        @Bean
        public MyService myService() {
            if ( userSettingIshessian ) {
                return new HessianExporter();
            }else {
                return new BurlapExporter();
            }
        }
      }
      

      当然你需要从某个地方获取用户设置,一个系统参数会很简单,或者配置文件,或者别的什么。

      【讨论】:

      • Spring 的困境:用依赖于另一个配置文件的类替换你的配置文件。
      猜你喜欢
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      相关资源
      最近更新 更多