【问题标题】:Java: creating a OCP based factory through Spring?Java:通过 Spring 创建基于 OCP 的工厂?
【发布时间】:2012-10-30 07:33:36
【问题描述】:

我有以下代码:

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;创建一个 Map ,其中 String 是 bean id;在 Spring Config 中将这些 bean 定义为原型,并在 Spring config 中也定义此 Map 并将其注入此类,然后从该映射中获取给定枚举的 bean id 并使用它从 AppContext 中获取 bean,

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

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

在 #1 中,我的课程依赖于 AppContext,而在其他方法中则不依赖。所以我倾向于#2 或#3,但是选择哪一个呢?或者有没有其他更好的方法我没有想到?

【问题讨论】:

    标签: java spring factory


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      看看FactoryBean,可能就是您要找的东西。以here 为例。

      【讨论】:

      • 对不起,我实际上是指#3 中的 FactoryBean 而不是 BeanFactory。我已经修改了问题。您能比较上面的#2 和#3 或提出其他建议吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多