Spring - 从父上下文引用子上下文

时间:2014-02-22 18:37:19

标签: java spring

我有一个有趣的用例,我正在考虑编写一个通用FactoryBean来从两个上下文之一中选择一个实例。

详细说明:

  • 我的父母语境称为root,有两个孩子:legacynewShiny
  • 两个子上下文在根上下文中注册为常规bean。

现在我的FactoryBean看起来像是:

class MyServiceFactoryBean extends AbstractFactoryBean<MyService> {
    @Inject
    @Qualifier("legacy")
    ApplicationContext legacy;

    @Inject
    @Qualifier("newShiny")
    ApplicationContext newShiny;

    @Override
    protected MyService createInstance() throws Exception {
        if (tossCoin() == HEADS) {
            return legacy.getBean(MyService.class);
        } else {
            return newShiny.getBean(MyService.class);
        }
    }

    @Override
    public java.lang.Class<?> getObjectType() {
        return MyService.class;
    }
}

这似乎是解决我的问题的方法,但让父母意识到自己的孩子会感到肮脏和非法(我们生活在哪个世界?)。

那么,这是个坏主意吗?为什么?它会导致什么问题?有哪些替代方案?或者这可能是一件几乎正常的事情?

对于一些背景知识,我需要支持两个非常不同的模型,我想隐藏在接口后面并在运行时选择实现(是的,它必须在运行时是动态的)。我正在考虑为他们使用不同的环境来保持清洁,避免干扰。

0 个答案:

没有答案