Struts2中的objectFactory
来源:互联网 发布:iccm软件测试定义 编辑:程序博客网 时间:2024/06/05 05:31
ObjectFactory,是xwork中很重要的一个类,是产生action的地方。单独使用xwork的时候,action都是这个类创建的。
struts2包装了ObjectFactory,自成了一个StrutsObjectFactory,他是继承自ObjectFactory的一个类,因此struts2默认产生action的类就不使用xwork的ObjectFactory了,而是使用StrutsObjectFactory。
struts2的插件struts2-spring-plugin-2.1.8.1.jar,又做了一个对象工厂,StrutsSpringObjectFactory,它的父类是xwork的SpringObjectFactory,最原始的父类也是ObjectFactory,我想xwork提供SpringObjectFactory的目的就是让实现这继承这个类,实现spring工厂。
于是struts2中也就是说有3个 对象工厂,
org.apache.struts2.spring.StrutsSpringObjectFactory(struts2的spring插件提供)
org.apache.struts2.impl.StrutsObjectFactory(struts2自带)
com.opensymphony.xwork2.ObjectFactory(xwork自带)。
他们都可以用于产生action。
在xwork中默认使用ObjectFactory,在struts2中默认使用StrutsObjectFactory。使用struts2的spring插件的时候默认使用StrutsSpringObjectFactory,这些都是自动的,其中前两个都是struts2的内容。都是由
<constant name="struts.objectFactory" value="spring" />
来控制,这里的value,就是
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
在这bean里面定义的是哪个工厂,struts2就用哪个工厂。
但是不管是哪个工厂最终这些都是有xwork控制完成的。
我们可以查看
xwork的DefaultActionInvocation类的createAction(Map<String, Object> contextMap)方法。这个方法就是工厂对象产生action的方法。我们可以看到这个类中的定义的对象工厂是
protected ObjectFactory objectFactory;
然后没有实例化,而是通过xwork的注入机制注入
@Inject
public void setObjectFactory(ObjectFactory fac) {
this.objectFactory = fac;
}
这个地方用的是最原始的ObjectFactory工厂,但是通过我们的配置为什么能变成StrutsSpringObjectFactory或StrutsObjectFactory呢?
这个还没有看完,单我想是多态造成的,因为ObjectFactory是StrutsSpringObjectFactory和StrutsObjectFactory的父类,可以用任意的子类实例化父类。
我想是通过解读
<constant name="struts.objectFactory" value="xia" />
这个配置,来确定注入 objectFactory的那个子类。
我们可以在DefaultActionInvocation的createAction方法打印一下objectFactory
会发现,使用不同的对象工厂,那么这里会打印相应的工厂。绝对不只是ObjectFactory这个父类
- Struts2中的objectFactory
- struts2的静态注入(ObjectFactory)
- struts2中的constant介绍之struts.objectFactory与spring的整合
- struts2中的constant介绍之struts.objectFactory与spring的整合
- struts2中的constant介绍之struts.objectFactory与spring的整合
- 【引用】struts2中的constant介绍之struts.objectFactory与spring的整合
- struts2中的constant介绍之struts.objectFactory与spring的整合
- struts2中的constant介绍之struts.objectFactory与spring的整合
- struts2中的constant介绍之struts.objectFactory与spring的整合
- struts2中的constant介绍之struts.objectFactory与spring的整合
- struts2中的constant介绍之struts.objectFactory与spring的整合
- struts2中的constant介绍之struts.objectFactory与spring的整合
- struts2的对象工厂(ObjectFactory)简介
- 使用struts2的builder alias机制加载objectFactory
- struts.objectFactory 由spring管理struts2的Action实例
- Mybatis_review之配置文件中的objectFactory节点内容说明
- Mybatis之配置文件中的objectFactory节点内容说明
- Unable to load bean: type:com.opensymphony.xwork2.ObjectFactory class:org.apache.struts2.spring.StrutsSpringObjectFactory - bean
- 有接口的CGLIB动态代理实现
- db2 jdbc和hiberte死锁
- (C#)更改设备的Telnet功能,运用Http GET 和 PUT请求
- 无线通信中几个重要概念
- Android动画基础入门
- Struts2中的objectFactory
- Verilog HDL && Quartus 设计规范、代码风格
- 第一篇博客
- PAT 1128. N Queens Puzzle (20)
- Android初级之ImageView的scaleType属性
- xcode 编译程序运行,总是提示输入用户名和密码的解决方法
- 计算图形的面积和周长
- 算法训练 字符串编辑
- PTA 5-21 求特殊方程的正整数解