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

问题描述

以下配置均未在Struts配置文件中加入<constant name="struts.objectFactory" value="spring" />情况说明如下:登录页面提交到Action中,Action在execute方法中调用ms对象中的valid方法进行验证,返回SUCCESS.在Action的构造方法中输出一行文字第一种情况:在Struts中配置Action,配置name,class配置成Spring中Action类的Bean ID,不指定调用方法。spring中配置Action Bean,class配置实际类名,并显示指定ms Bean的引用。这时Action由Sping来创建。构造方法输出两行第二种情况:在Struts中配置Action,配置name,class配置成实际类名。spring中只配置ms Bean的引用,进行自动装配。这时Action由Spring进行创建。构造方法输出一行第三种情况,在Struts中配置Action,配置name,class配置成实际类名,指定方法名不为默认的execute,为任意其他,例如test,这个方法调用ms对象中的valid方法进行验证。spring中配置Action Bean,class配置实际类名,并显示指定ms Bean的引用。这时也是可以成功的。构造方法输出一行第三种情况中,如果Struts中不指定方法,或者指定execute方法,均报错。虽然报错,但是控制台输出一行Action构造方法中的文字。想问一下第三种情况的Action由谁来创建,Struts创建和Spring来创建有什么区别

解决方案

引用第三种情况,在Struts中配置Action,配置name,class配置成实际类名,指定方法名不为默认的execute,为任意其他,例如test,这个方法调用ms对象中的valid方法进行验证。spring中配置Action Bean,class配置实际类名,并显示指定ms Bean的引用。这时也是可以成功的。构造方法输出一行 这种情况在集成spring的情况下其实是:SpringObjectFactory代码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" />

时间: 2024-10-30 10:54:53

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

struts 2-Struts和Spring整合后访问Action注入失败

问题描述 Struts和Spring整合后访问Action注入失败 如题,刚刚接触SSH,不知道是哪配置出问题了, 蛋疼的是单元测试中用ClassPathXmlApplicationContext读取spring配置文件却通过了- - Struts2配置: <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --&g

关于struts2和spring整合的问题

问题描述 以前培训的时候讲到过这个,整合正常的做法是导入struts2-spring-plugin.jar包,然后在struts.xml里面配置action标签的class属性时直接写创建action类的bean id的名字,而不是直接写类的路径,当然new action类是通过spring来创建bean的(不管是注解方式还是xml方式),但是实验结果是就算不导入struts2-spring-plugin.jar包,struts.xml里面配置action标签的class属性时直接写类的路径,并

struts2 怎么在js中获取action传回的数据

问题描述 struts2 怎么在js中获取action传回的数据 在action类里 有一个 List users = new ArrayList();action返回之后想要想要在onload里 先把users做一下处理这时在function load(){ .... }中怎么得到users 解决方案 可以用EL表达式var t = ${users} 解决方案二: 在js里可以直接用var t = '' 关键不要忘了最外面的引号 if和iterator可以直接用 不需要引号 解决方案三: 如果

Struts2 和spring整合的 Action层托管问题

首先分为 entity(实体) dao(数据库操作) service   action四个层 千万不要注解xml混用   通常我么对于四个层的单多例设置为: (1)    action一定要设为多例 注意:Struts管理时:当使用注解@Scope("singleton")设置action为单例时,可以通过属性注入设置属性的为多例.(很奇怪,和sprig管理不同) spring管理时,当action设置为单例时,不管你怎么设置里面的属性为多例,并且注入到action,都是没用的    

mybatis和spring整合中mapperInterface是做什么用的

问题描述 <bean id="mapDao" class="org.mybatis.spring.MapperFactoryBean"><!-- 这里是接口,不是接口实现类了 --> <property name="mapperInterface" value="com.ssm.iface.IUserDao"/><property name="sqlSessionFactor

struts2+Hibernate+spring整合问题(异常

问题描述 异常信息:exceptionUnable to instantiate Action, loginAction, defined for 'loginAction' in namespace '/'loginActioncom.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:318)com.opensymphony.xwork2.DefaultActionInvo

struts2+ibats+spring整合启动tomcat报错

问题描述 严重: Dispatcher initialization failedjava.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetExceptionat com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:

struts和spring整合-关于使用struts2注解和sping整合的问题。

问题描述 关于使用struts2注解和sping整合的问题. 如题,struts2与spring整合后,struts2使用注解的方式,struts.xml加入如下配置信息: <constant name="struts.convention.action.suffix" value="Action"/> <constant name="struts.convention.package.locators" value="

java-测试Spring整合hibernate/Struts2框架时,配置文件报奇怪的错误,求解

问题描述 测试Spring整合hibernate/Struts2框架时,配置文件报奇怪的错误,求解 为什么会报无法识别property? 解决方案 怎么都是这种问题,property要包含在bean标签内 解决方案二: Struts2+hibernate+spring整合时错误Struts2+hibernate+spring整合时错误 解决方案三: http://iteye.blog.163.com/blog/static/186308096201210265334689/ 解决方案四: pro