Struts2 Action 单例多例模式

本文探讨了Struts2框架与Spring框架整合时单例与多例模式的区别,通过实例展示了不同模式下Action实例的创建过程及影响,并强调了理解框架原理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     很多时候我们学习框架,只知道怎么用,不知道起原理是什么。这样其实是很危险的一件事情,因为一出问题不知道为什么,折腾了好几天可能误打乱撞,折腾正确了,但是因为时间紧迫,赶项目,完全不去挖掘去原理,没有融会贯通,以后还是会遇到问题,又这样折腾,然后又解决了,这样导致知识点成孤岛,完全没有把他们联系起来。

     框架能够带给我们的是开发效率,让开发者对很多东西透明的,由于没有时间加之没有这个环境,或者因为个人原因,没有几个人能够真正学习了解框架的原理。好比J2EE开发著名三大框架SSH,会用的一大把,依葫芦画瓢,但是真正懂掌握的凤毛麟角。这是我一年的深痛领悟。今后的时间将会更加专注本质专注原理。

     昨天遇到struts2的问题,不知为何,后来网上查阅了大量资料,动手验证。明白了Struts2   Action   单例多例模式。这里说明一下,如果不用spring注解的话,struts2默认是多例的。出现单例跟多例是因为用了spring注解。

@Controller("admin")
public class ccAction {
	
	private KhzjBean khzjBean;

	public void setKhzjBean(KhzjBean khzjBean) {
		this.khzjBean = khzjBean;
	}

	public KhzjBean getKhzjBean() {
		return khzjBean;
	}
	
	public void test1(){
		khzjBean.setAddress("aaa");
		khzjBean.setId(1);
	}
	
	public void test2(){
		
		System.out.println(khzjBean.getAddress());
		System.out.println(khzjBean.getId());
		System.out.println(khzjBean.getName());
	}
}
main.jsp采用这样的方式去访问

<body> 
		<a href="cc_test1.action?khzjBean.name=yyc">测试一</a>
		<a href="cc_test2.action">测试二</a>
</body>
当点击了测试一,再去点击测试二,后台输出的aa  1  yyc ,然后我换了一个浏览器再去访问
<a href="cc_test2.action">测试二</a>
后台还是输出 aa  1  yyc


其它不变在@Controller("admin")后面加一个@Scope("prototype")。在同样的操作,点击测试一之后在点击测试二,报空指针异常!!

为什么会报空指针异常,因为用spring注解action的话,没有写Scope,默认是@Scope("singleton"),也就是默认是单例的。从此例子看,单例就是spring只new一个action,不管是张三访问还是李四访问,还是张三在不同时间访问,或者在不同浏览器访问,调用的都是同一个action。这个是有点危险的事,慎用!多例的意思是,张三访问,第一次进去的action和第二次进去的action是不一样的,spring自动装配一个新的action。所以上面的访问test2的时候,拿不到数据,报空指针。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值