0

我可以有如下工厂吗?

public class Factory
{
    private static Map<EnumXyz, IDAO> map = new HashMap<Sting, Object>();


    public static void init()
    {
        //how do i initialize my map through spring initialization
    }

    public static IDAO getDAO(EnumXyz dao)
    {
        if (map.containsKey(dao))
        return map.get(dao);
        else
        {
            throw new IllegalArgumentException("dao not supported " + dao);
        }

        return null;
    }

}
  1. 我如何通过 spring 来处理我的工厂的初始化?
  2. 这种建厂方式正确吗?
  3. 还有其他更好的方法吗?
4

2 回答 2

2
  1. 不要让一切都是静态的,尤其是 init() 方法。
  2. 用注释你的 bean@Component
  3. 用注释您的init()方法@PostConstruct

现在,init()当 Spring 构造您的 Factory 类时,将调用该方法,为它提供一个初始化自身的钩子。

于 2012-08-13T14:13:28.023 回答
0

我会将您的工厂实例化为 bean 本身,并拥有它的一个实例- 不要让一切都成为静态的。Spring 本身可以控制您的 bean 是否为单例(默认为单例)。

例如

public class Factory {
   public Factory(final Map<String,Object} map) {
      this.map = map;
   }
}

和你的 Spring 配置:

<bean id="myFactory" class="Factory">
   <constructor-arg>
      <util:map>
        <!-- configure your map here, or reference it as a separate bean -->
        <entry key="java.lang.String" value="key">....</entry>
      </util:map>
   </constructor-arg>
</bean>

在您的构造函数中,传入在您的 Spring 配置中定义的映射。

于 2012-08-13T14:11:58.703 回答