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

thi*_*rdy 2 java spring

如果你有

private static MyDAO myDAO;
Run Code Online (Sandbox Code Playgroud)

并在applicationContext中声明为

<bean id="myDAO" scope="singleton" class="my.MyDAO" />
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Ste*_*n C 6

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

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

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