繁体   English   中英

通过春天初始化我的工厂

[英]initializing my factory through spring

我可以如下工厂吗?

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. 如何通过弹簧来处理工厂的初始化?
  2. 这种建造工厂的方式是否正确?
  3. 还有其他更好的方法吗?
  1. 不要让一切都静止,特别是不是init()方法。
  2. 使用@Component注释您的bean
  3. 使用@PostConstruct注释您的init()方法。

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

我会将你的工厂实例化为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配置中定义的映射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM