Java 我的工厂将在春季开工

Java 我的工厂将在春季开工,java,spring,initialization,factory,Java,Spring,Initialization,Factory,我能有一个如下的工厂吗 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

我能有一个如下的工厂吗

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;
    }

}
公共类工厂
{
private static Map=new HashMap();
公共静态void init()
{
//如何通过spring初始化来初始化映射
}
公共静态IDAO getDAO(EnumXyz dao)
{
if(地图容器(dao))
返回map.get(dao);
其他的
{
抛出新的IllegalArgumentException(“不支持dao”+dao);
}
返回null;
}
}
  • 如何在spring期间完成工厂的初始化
  • 这样建工厂对吗
  • 还有其他更好的方法吗

  • 我会将您的工厂实例化为一个bean本身,并拥有它的一个实例—不要使所有内容都是静态的。Spring本身可以控制您的bean是否为单例(它将默认为单例)

    e、 g

    公共类工厂{
    公共工厂(最终地图)
    
  • 不要让一切都是静态的,尤其是init()方法
  • @Component
  • @PostConstruct
    注释您的
    init()
    方法

  • 现在是
    init()
    方法在Spring构造Factory类时被调用,为其提供一个钩子来初始化自身。

    没有得到您的理解,您可以详细说明并且Factory本身将是单例类吗?Factory可以从多个位置调用,所以我如何确保Factory只有一个实例?如果您希望它是单例,将有一个实例每个应用程序上下文的一个实例(您可能只有一个应用程序上下文)。上面实例化了工厂类的一个实例,并在构造时为其提供映射。我理解您的代码。但我的问题是,如果我将其设置为单例,那么如何初始化它?我是否应该有一个以映射为参数的公共方法init?
    public class Factory {
       public Factory(final Map<String,Object} map) {
          this.map = map;
       }
    }
    
    <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>