声明单例Spring bean静态的效果?

时间:2010-09-17 07:26:35

标签: java spring

如果你有

private static MyDAO myDAO;

并在applicationContext中声明为

<bean id="myDAO" scope="singleton" class="my.MyDAO" />

当已经声明为单例时,使用static修饰符声明myDAO会有什么影响吗?

提前致谢!

2 个答案:

答案 0 :(得分:6)

bean声明意味着Spring IoC系统将只为您的my.MyDOA对象创建一个实例(每个webapp)。但是没有什么可以阻止其他事情(例如你的代码)创建其他实例。

如果通过Spring IoC填充myDAO变量(使用接线文件或注释),则不需要将其声明为静态。如果包含该声明的类有多个实例,并且实例由Spring IoC创建/连接,则变量的所有副本将获得相同的值。声明static是毫无意义和糟糕的风格。

另一方面,如果您的应用程序正在创建包含该声明的类的实例,那么它将需要采取适当的步骤来初始化它。初始化变量的方法取决于变量是否是静态的。你可能不想这样做......

答案 1 :(得分:2)

删除static。使用spring bean时,在涉及依赖项时忘记static