Struts2和Spring整合中的Action是由谁创建的,有什么区别

 我来答
匿名用户
2017-04-13
展开全部
引用
第三种情况,在Struts中配置Action,配置name,class配置成实际类名,指定方法名不为默认的execute,为任意其他,例如test,这个方法调用ms对象中的valid方法进行验证。spring中配置Action Bean,class配置实际类名,并显示指定ms Bean的引用。这时也是可以成功的。构造方法输出一行

这种情况在集成spring的情况下其实是:
SpringObjectFactory代码
Java代码 收藏代码
public Object buildBean(String beanName, Map<String, Object> extraContext, boolean injectInternal) throws Exception {
Object o;

if (appContext.containsBean(beanName)) {
o = appContext.getBean(beanName);
} else {
Class beanClazz = getClassInstance(beanName);
o = buildBean(beanClazz, extraContext);
}
if (injectInternal) {
injectInternalBeans(o);
}
return o;
}

1、首先根据<action class="">中的class作为bean的名字查找spring容器;
2、如果找不到得到class的Class类型,创建一个bean;
3、完成资源注入

引用
第三种情况中,如果Struts中不指定方法,或者指定execute方法,均报错。虽然报错,但是控制台输出一行Action构造方法中的文字。
按理说不应该报错? 什么错误?

Struts创建和Spring来创建有什么区别

struts2也是个IoC容器,可以把ObjectFactory认为是struts2 IoC具体代表者,跟Spring容器的代表BeanFactory是类似的。

都是IoC容器,只是功能上/实现上的差别。其他思想都一样,当我们集成spring时,
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

<!-- Make the Spring object factory the automatic default -->
<constant name="struts.objectFactory" value="spring" />

会自动注册如上一个bean(struts2中的bean),org.apache.struts2.spring.StrutsSpringObjectFactory就是一个struts2的ObjectFactory实现,并委托给spring(可以认为是 策略/适配器模式实现)

而struts2默认的IoC容器实现是:
<bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />
<bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" />
猫猫兔鼠鼠
2017-04-13 · TA获得超过267个赞
知道小有建树答主
回答量:371
采纳率:100%
帮助的人:110万
展开全部
由你创建的,Struts2管理,Struts2专注于action层,负责MVC中C,控制器Controller。
Spring实际上就是一个容器负责bean的生成,谁需要bean就给谁,传统方式是我们主动去获取,用了spring之后,我们就不需要管了,我们就属于被动形式了。这样的好处就是不需要主动去请求了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式