代码之家  ›  专栏  ›  技术社区  ›  Rich Kroll

春豆如何“白标”

  •  4
  • Rich Kroll  · 技术社区  · 15 年前

    我们有一个白色标签的应用程序(一个应用程序支持多个客户的品牌体验)。我们希望能够加载一个组件的联合品牌版本,以支持每个客户的定制组件。例如:

    <!-- default service -->
    <bean id="service" class="com.blah.myService" primary="true">
      <property name="myBean" ref="bean" />
    </bean>
    <!-- custom service for client 123 -->
    <bean id="service_123" class="com.blah.myService">
      <property name="myBean" ref="bean" />
    </bean>
    
    <!-- default bean -->
    <bean id="bean" class="com.blah.Bean" primary="true"/>
    <!-- bean for client 123 -->
    <bean id="bean_123" class="com.blah.Bean" />
    

    例如,如果我调用getBean(“service”),我可以在我的自定义ApplicationContext中拦截调用并返回service_123,但是“bean”属性使用缓存版本,并且不会再次调用getBean方法,因此我无法连接自定义版本。

    有没有一种简单的方法来实现这种类型的运行时自定义注入?

    3 回复  |  直到 15 年前
        1
  •  1
  •   axtavt    15 年前

    首先,您可能不需要子类 ApplicationContext 要实现这种自定义实例化逻辑,可以创建 BeanPostProcessor

    要解决bean缓存版本的问题,可以将返回的bean包装到某种代理中—使用AOP或手动(例如,请参阅 TargetSource 以及它的子类)。

        2
  •  1
  •   Jens Schauder    10 年前

    你会有一个客户的档案与特殊的豆子。 加上默认客户的配置文件。

    This article 应该开始使用概要文件,尽管用例完全不同。

        3
  •  0
  •   Alex    15 年前

    一种方法是手动加载这些bean:

    myAppContext.getBean("bean_" + customer.getId());