Struts2灵活的插件机制来与其他框架进行整合

Struts2提供了灵活的插件机制来与其他框架进行整合,开发者通过提供Struts2扩展点的特殊实现并注册,来具体实现这种整合。

每一个Struts2的插件就是一个包含了扩展类和struts-plugin.xml配置文件的jar包,当启动一个Struts2的应用时,配置文件的加载顺序是struts-default.xml、struts-plugin.xml、struts.xml。多个插件包之间不应该有依赖关系,因为Struts2不保证各个插件包的加载顺序。

(1)Struts2提供的重要扩展点如下:

com.opensymphony.xwork2.ObjectFactory:它主要用于创建Struts2中的Action、Result、Interceptor等实例。通过struts.objectFactory常量来注册。

com.opensymphony.xwork2.ActionProxyFactory:它主要用于创建ActionProxy实例。通过struts.actionProxyFactory常量来注册。

com.opensymphony.xwork2.util.ObjectTypeDeterminer:它主要用于检测Map中的key和value,以及集合中元素的类型。通过struts.objectTypeDeterminer常量来注册。

org.apache.Struts2.dispatcher.mapper.ActionMapper:它用来完成请求映射,包括用户请求映射到Action,Action处理结果映射到指定视图资源。通过struts.mapper.class常量来注册。

org.apache.Struts2.dispatcher.multipart.MultiPartRequest:它主要用来处理enctype="multipart/form-data"的请求,如文件上传操作。通过struts.multipart.parser常量来注册。

org.apache.struts2.views.freemarker.FreemarkerManager:它主要用来处理FreeMarker模板。通过struts.freemarker.manager.class常量来注册。

(2)通过常量具体如何来注册扩展点呢,可以通过在struts.xml文件、或者struts-plugin.xml文件中添加如下配置来完成注册:

<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
   
<constant name="struts.objectFactory" value="spring" />

下面具体介绍一下struts2-spring-plugin.jar插件包来实现Struts2和Spring整合的情况。

struts2-spring-plugin.jar包中,其实只有一个扩展类org.apache.struts2.spring.StrutsSpringObjectFactory,它继承了com.opensymphony.xwork2.spring.SpringObjectFactory类,在StrutsSpringObjectFactory类的构造函数中,它从servletContext中取得spring的ApplicationContext实例(即Spring的容器实例),并调用父类的setApplicationContext方法注入该ApplicationContext实例。

父类SpringObjectFactory类重写了com.opensymphony.xwork2.ObjectFactory扩展点的buildBean方法,在buildBean方法中,通过Spring的ApplicationContext对象来取得Spring容器管理的bean。

至此,也就完成了Struts2和Spring整合最重要的部分,即让Struts2中Action、Result、Intercetpor等对象都来自与Spring容器中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值