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这个父类
转自:
http://aixiangct.blog.163.com/blog/static/9152246120101016113237982/
分享到:
相关推荐
在Qt中,"ObjectFactory"模式是一种设计模式,它提供了一种动态创建对象的方式,使得在运行时可以根据需要创建不同的类实例。这种模式在需要灵活地根据配置或用户输入创建不同类型的对象时特别有用。 "Qt反射"是Qt...
JAXB对package包下所有对象编组需要的ObjectFactory.java类
对象工厂 Object Factory旨在简化创建可用于单元测试的随机... ObjectFactory的主要类是ObjectFactory,它提供一个API <T> T generate(Type type)用于为给定类型生成随机对象。 看看下面的示例,该示例从ObjectFacto
在Spring框架中,`ObjectFactory`和`ObjectProvider`是两个重要的接口,它们与Spring的依赖注入(Dependency Injection,简称DI)机制密切相关。本文将详细解释这两个接口的概念、用途以及与`FactoryBean`的区别。 ...
**JDK21集成CXF详解** 在Java开发中,CXF是一个广泛使用的开源框架,主要用于构建和开发服务导向架构(SOA)的应用程序。它提供了SOAP和RESTful Web服务的支持,同时也支持WS-*规范。CXF允许开发者利用Java语言的...
RFonts rFonts = objectFactory.createRFonts(); rFonts.setAscii("Times New Roman"); rFonts.setEastAsia("宋体"); rpr.setRFonts(rFonts); // 行 R r = objectFactory.createR(); // 文本 Text text = ...
`ObjectFactoryCreatingFactoryBean`则是`FactoryBean`的一个实现,它的特殊之处在于它创建的是一个`ObjectFactory`,而不是直接创建目标对象。 `FactoryBean`接口是Spring用来创建复杂对象的工具,它有三个主要的...
- 在 `struts-plugin.xml` 中,定义了 `struts.objectFactory` 常量为 "spring",意味着 Struts2 将使用 Spring ObjectFactory 来创建 Action 对象。 2. **Struts2-Spring ObjectFactory**: - `org.apache....
WebService是Web应用程序之间进行通信的一种技术,它允许不同的系统通过Internet进行交互,实现了跨平台、跨语言的数据交换。本文将详细介绍使用JDK和CXF两种方式来开发WebService服务端。 一、JDK原生实现...
卷 文档 的文件夹 PATH 列表 卷序列号为 000C-BB91 E:. │ config.properties │ Dao.java │ GeneratorDemo.java │ hibernate.cfg.xml │ HibernateDaoImpl.java │ HibernateSessionFactory.java ...
struts.objectFactory 属性指定 Struts 2 默认的 ObjectFactory Bean,该属性默认值是 spring。 5. struts.objectFactory.spring.autoWrite struts.objectFactory.spring.autoWrite 属性指定 Spring 框架的自动...
第一天: 什么是webservice? 从案例(便民查询网站)分析如何实现? 使用socket实现。 使用jaxws开发webservice。 Webservice三要素 ...Wsdl(webservice使用说明书)重点掌握 Soap(jaxws开发webservice的传输协议)...
package webser1; import cn.com.WebXml.WeatherUtil; public class _main { public static void main(String[] args) { WeatherUtil w=new WeatherUtil();... for(String temp:w.getWeather("西安")){ ...}
2. 配置struts.objectFactory属性值: 在struts.xml文件中添加 <constant name="struts.objectFactory" value="spring" /> 注意:如果有了struts2-spring-plugin-2.3.8.jar文件可以不用配置(本源代码中是没有...
在三级缓存中,ObjectFactory会将bean的实例经过SmartInstantiationAwareBeanPostProcessor的getEarlyBeanReference方法处理,从而实现了bean的提前曝光。这样,在实例化bean时,如果存在循环依赖,Spring就可以通过...
3. **ObjectFactory**:Spring通过`ObjectFactory`接口来提供bean的早期访问。当beanA依赖于beanB,但beanB尚未完全初始化时,Spring会创建一个`ObjectFactory`实例,这个工厂能够返回beanB的早期引用。当需要注入...
5. `struts.objectFactory.spring.autoWrite`和`struts.objectFactory.spring.useClassCache`: 分别控制Spring自动装配模式和是否缓存Bean实例。 6. `struts.objectTypeDeterminer`: 决定了Struts2如何检测对象类型...
在IT行业中,Web服务是一种广泛使用的接口技术,用于不同系统之间的数据交换。...SOAP Header是SOAP消息的一部分,用于传递附加信息,如认证、会话管理、事务处理等。在这个"soapHeader验证例子"中,我们将探讨如何使用...
WebService小白学习,处理JavaBean以及复合类型,list,处理一些Map等复杂类型, CXF添加拦截器,自定义拦截器等等。 博客学习地址:https://blog.csdn.net/qq_37902949/article/details/81262826