Java:通过Spring创建一个基于OCP的工厂?

时间:2012-10-30 07:33:36

标签: java spring factory

我有以下代码:

public IFoo getFoo(Type type) // Type is an enum containing A, B etc.
{
    switch(type)
    {
        case A: return new Foo1(); // implements IFoo
        case B: return new Foo2(); // implements IFoo
        etc.
    } 
}

这显然违反了OCP,所以我需要重构;另外我现在需要返回由Spring容器管理的原型bean。为此,我可以考虑以下选项:

1)使这个类AppContextAware;创建一个地图< Type,String>其中String是bean id;在Spring Config中将这些bean定义为原型,并在Spring配置中定义此Map并将其注入此类,然后从该映射获取给定枚举的bean id并使用它从AppContext获取bean,

2)类似的方法,但是对于Map中的值,使用一个TargetSource,它有一个我在getTarget()中调用的抽象方法,并且我使用lookup-method连接定义的原型bean作为这个抽象方法TargetSource定义,

3)类似的方法,但我使用FactoryBean而不是TargetSource。

在#1中,我的课程取决于AppContext,而其他方法则不然。所以我倾向于#2或#3,但要选择哪一个?或者还有其他更好的方法,我没有想过?

2 个答案:

答案 0 :(得分:1)

无论如何我最终使用#1,因为它是最简单的,并创建了更少数量的bean。

答案 1 :(得分:0)

看一下FactoryBean,可能就是你要找的东西。请查看here示例。