首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Struts2的对象工场(ObjectFactory)及其在Struts2与Spring整合中的作用

2012-07-15 
Struts2的对象工厂(ObjectFactory)及其在Struts2与Spring整合中的作用ObjectFactory,是xwork中很重要的一

Struts2的对象工厂(ObjectFactory)及其在Struts2与Spring整合中的作用

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的内容。都是由

来控制,这里的value,就是

?

在这bean里面定义的是哪个工厂,Struts2就用哪个工厂。

?

但是不管是哪个工厂最终这些都是有xwork控制完成的。
我们可以查看xwork的DefaultActionInvocation类的createAction(Map<String, Object> contextMap)方法。这个方法就是工厂对象产生action的方法。我们可以看到这个类中的定义的对象工厂是

这个配置,来确定注入 ObjectFactory的那个子类。

?

?

我们可以在DefaultActionInvocation的createAction方法打印一下objectFactory
会发现,使用不同的对象工厂,那么这里会打印相应的工厂。绝对不只是ObjectFactory这个父类。

?

说明: 此文纯粹是从网络摘抄而来, 也根据此阅读了源码, 学习良多, 印象深刻, 特此分享之。

热点排行