spring、struts2单例总结
1.前提:struts2、spring2.x环境
2.例子
@Component//@Scope("prototype")public class TestManager {private int i;public int getIndex() {return ++i;}}
用浏览器连续访问3次action控制台显示结果:
---------
testManager1:cn.com.super.service.TestManager@1a70128,i=1
testManager2:cn.com.super.service.TestManager@13cfd6e,i=1
---------
testManager1:cn.com.super.service.TestManager@1a70128,i=2
testManager2:cn.com.super.service.TestManager@5569ba,i=1
---------
testManager1:cn.com.super.service.TestManager@1a70128,i=3
testManager2:cn.com.super.service.TestManager@f4f9c,i=1
通过对注入的t1和new出来的t2两个实例变量的比较可知,t1在3次访问中只有一个实例,而t2则每次访问都是不同的实例。由此可知:
1.struts2创建的action为多例。
2.通过Autowired注入的bean默认为单例。
3.如果要让bean为多例可以添加注解:@Scope(“protorype”)。
4.若注入的bean为单例需要注意线程安全问题,尽量不要使用成员变量。
5.一个bean注入生成第一个实例后,以后不管在那个类中注入此bean都将使用第一次生成的这个实例,即整个过程中都只有这一个单例存在。