samtiger
QQ:418148757
Name:yangchuan
BlogJava
首页
新随笔
联系
聚合
管理
数据加载中……
关于spring2与struts1整合 的DelegatingActionProxy 委托方式及一些问题思考
spring与struts结合,很多人都说必须要在struts-config.xml配置文件里加上org.springframework.web.struts.ContextLoaderPlugIn插件,其实这个说法不一定,spring是先查找的struts-config.xml里的配置,如果没有,再去查找web.xml里边的配置的。所以我们只需要配置web.xml就可以了。看看代码,从DelegatingActionProxy 类中查看有如下代码:
protected
Action getDelegateAction(ActionMapping mapping)
throws
BeansException
{
WebApplicationContext wac
=
getWebApplicationContext(getServlet(), mapping.getModuleConfig());
String beanName
=
determineActionBeanName(mapping);
return
(Action) wac.getBean(beanName, Action.
class
);
}
上边的代码是需要一个spring的应用环境对象,继续察看getApplicationContext的代码,如下:
protected
WebApplicationContext getWebApplicationContext(
ActionServlet actionServlet, ModuleConfig moduleConfig)
throws
IllegalStateException
{
return
DelegatingActionUtils.findRequiredWebApplicationContext(actionServlet, moduleConfig);
}
好,跟踪到DelegatingActionUtils.findRequiredWebApplicationContext方法,如下:
public
static
WebApplicationContext findRequiredWebApplicationContext(
ActionServlet actionServlet, ModuleConfig moduleConfig)
throws
IllegalStateException
{
WebApplicationContext wac
=
getWebApplicationContext(actionServlet, moduleConfig);
//
If no Struts-specific context found, fall back to root context.
if
(wac
==
null
)
{
wac
=
WebApplicationContextUtils.getRequiredWebApplicationContext(actionServlet.getServletContext());
}
return
wac;
}
上边的代码(if(wac==null))说明当struts配置中没有配置spring插件就回到web.xml配置中去找,你可以继续跟踪代码就可以找到他是怎么创建applicationContext对象的。
问题2 :我们知道struts1里面的action是非线程安全的,(关于这一点,你可以查看struts的源代码,可发现struts的在RequestProcessor里利用了享元模式来管理每一个action的,而RequestProcessor对象是存储在servletContext里面的),我们用spring的DelegatingActionProxy 类作代理,所以是由 spring去创建具体的action类,这样创建的action应该也是非线程安全的
因此,如果我们向用ioc的方式往action里注入一些属性的话,想必会带来并发访问冲突问题,故,我们是不是需要在spring里配置action的bean的时候应该配置成非单例模式 (即singleton="false")呢;
问题3:在spring中bean的默认配制都是singleton="true"的,尽管我们把action配置成非一个实例,但是在我们的业务逻辑bean里我们还是没有逃脱多线程并发访问时带来的安全隐患,因此,在我们编写的业务逻辑层bean的时候,是不是也需要注意使用两种方式来解决这个问题呢,我们要不就不要在该bean内写类属性(字段),要不就是在spring配置里将其配置成singleton="false"。
总结上述,其实我们在实现ssh1框架的时候,只要注意在action 里和业务逻辑bean里等地方都尽量取消类字段,就可以避免多线程并发访问的问题
posted on 2008-01-25 17:42
sam.chuan.yang
阅读(3221)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
<
2008年1月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
统计
随笔 - 30
文章 - 4
评论 - 29
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔分类
23设计模式的理解(3)
(rss)
android(1)
(rss)
javascript 笔记(2)
(rss)
工具的使用(5)
(rss)
随笔档案
2012年7月 (1)
2012年5月 (1)
2012年4月 (1)
2011年12月 (1)
2010年10月 (1)
2010年6月 (1)
2010年5月 (1)
2010年4月 (1)
2009年3月 (1)
2008年11月 (4)
2008年9月 (1)
2008年4月 (2)
2008年3月 (1)
2008年1月 (2)
2007年12月 (1)
2007年10月 (4)
2007年9月 (6)
文章分类
flex基础(4)
(rss)
文章档案
2010年4月 (4)
相册
再回北京
我的代码
JSONTool.jar
(rss)
我写的一个java转换为json字串的小工具。可以将pojo。集合和map转换为相应的json字串,以供前台js调用. 使用方法JSONTool.toJSON(list)。或JSONTool.toJSON(pojo)。或JSONTool.toJSON(map)。都会返回一个json格式的字串,
搜索
最新评论
1. re: flex之弹出窗口数据传递[未登录]
123123
--123123
2. re: flex之弹出窗口数据传递
@aaaa
撒旦法都是
--的
3. re: 设计模式之单例模式[未登录]
wole asd a
--oscar
4. re: flex之弹出窗口数据传递
fdas
--fdsa
5. re: flex之弹出窗口数据传递
电饭锅电饭锅
--二
阅读排行榜
1. 设计模式之状态模式(5889)
2. 关于showModalDialog参数说明(4158)
3. 关于spring2与struts1整合 的DelegatingActionProxy 委托方式及一些问题思考(3221)
4. CruiseControl+maven2+SVN+apache+ldap(或其它)(2657)
5. struts2验证失败后返回input,select中list数据丢失问题(2651)
评论排行榜
1. spring2.04+hibernate3.2+struts2+ajax中文乱码问题(3)
2. 设计模式之单例模式(2)
3. 关于java数据类型和参数(2)
4. 关于showModalDialog参数说明(2)
5. struts2验证失败后返回input,select中list数据丢失问题(2)