struts2 action 有spring创建还是struts2创建分析
2017-03-02 09:51
351 查看
以下配置均未在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代码
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" />
情况说明如下:登录页面提交到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代码
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" />
相关文章推荐
- spring没能给struts2创建出action,可能出现的原因
- 关于struts和Spring 结合到一起之后存在ACtion创建单实例还是多
- Struts2整合Spring创建的Action同步问题
- Struts2与Spring整合时Action的创建问题
- struts2与spring整合问题,访问struts2链接时,spring会负责创建Action
- 关于struts2结合spring 创建action的思考 singleton prototype
- 关于struts和Spring 结合到一起之后存在ACtion创建单实例还是多
- 关于struts2中与Spring中Action对象创建的问题
- spring整合struts2后,struts2的action中调用服务层时,不需要在spring配置文件中去注入
- 使用Spring的单例创建Struts2 action Bean的问题
- 使用Maven管理项目-----创建 Struts2,Spring,Hibernate项目
- MVC的Controller-Action布局:单独的创建/编辑页面还是创建/编辑/查看一体的页面?
- spring2+struts2实现action间的跳转并给予成功提示
- MVC的Controller-Action布局:单独的创建/编辑页面还是创建/编辑/查看一体的页面?
- 由Spring管理的Struts2的Action的单实例问题
- MVC的Controller-Action布局:单独的创建/编辑页面还是创建/编辑/查看一体的页面?
- MVC的Controller-Action布局:单独的创建/编辑页面还是创建/编辑/查看一体的页面?
- 由Spring管理的Struts2的Action的单实例问题
- struts2 spring集成时struts.xml文件中action的class属性值意义
- Spring 管理Struts2 Action