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;
}
}
我会将您的工厂实例化为一个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>