Struts2+Spring+Groovy配置

本文介绍了如何在Struts2和Spring项目中整合使用Groovy,以解决频繁修改和部署的问题。通过Groovy的动态特性,避免编译和重启服务,提高开发效率。文章详细阐述了Struts2-2.0.11.1、Spring-2.5.6和Groovy-1.6.4的整合步骤,包括自定义GroovyStrutsSpringObjectFactory类,配置Struts.xml和Spring的actionContext.xml文件,以及编写Groovy Action类。最后展示了测试页面和结果。
摘要由CSDN通过智能技术生成

      接触Groovy是两年以前的事了,就是尝试了一下,并没有用到项目当中,直到现在才运用到项目中,只是其中的一个小模块,也不敢大规模运用,因此想记录下来我的一些心得,以便以后查阅,也希望大家提些意见。

      首先说说为什么要选择使用Groovy,虽然我们的项目不是很大,然而修改和新增功能及其频繁,因为是我们公司自己做的项目,一个会议下来就需要改很多东西,因此我已经多了好几遍了,最大的感受就是开发赶不上变化。最痛苦的就是已经部署到外网上后,需要改某个方法,因为我没有用Ant工具,每次都是在本地改好编译后再替换外网的类,再重启服务器,频繁的改动让我痛苦不已。于是我就想到了Groovy,把它加入到现在的项目中来。由于Groovy是基于JVM的动态语言,使用Groovy后就不需要编译了,修改方法后也不需要重启服务了,这样省了很多时间。另外,除此可以使用Java所以的功能之外还能使用Groovy特有的功能,比如闭包、GString让代码更为简洁,开发效率也更高。

      现在来说说Struts2+Spring+Groovy的整合吧。我使用的版本是Struts2-2.0.11.1,Spring-2.5.6和Groovy-1.6.4,还有其他的一些包就不说了。struts2也有Groovy的插件struts2-groovy-plugin-0[1].2.jar,它只能让Struts2来管bean,而Spring就无法管理了,因此需要让Spring来管理Groovy,由于Spring所属公司已经收购了Groovy,它也支持Groovy,现在需要重新Struts2的SpringObjectFactory,加入Groovy的GroovyClassLoader来装载Groovy文件,具体代码如下:

package com.sysframework.plugin.groovyworks;

import groovy.lang.GroovyClassLoader;

import java.io.InputStream;

import javax.servlet.ServletContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.StrutsConstants;
import org.codehaus.groovy.control.CompilerConfiguration;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.spring.SpringObjectFactory;
import com.opensymphony.xwork2.util.ClassLoaderUtil;

@SuppressWarnings("unchecked")
public class GroovyStrutsSpringObjectFactory extends SpringObjectFactory {

 private static final long serialVersionUID = 1L;

 private static final Log log = LogFactory.getLog(GroovyStrutsSpringObjectFactory.class);

 private GroovyClassLoader gcl;

    private String autoWire;
    private boolean useClassCache = true;
   
    @Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE,required=false)
    public void setAutoWire(String val) {
        autoWire = val;
    }
   
    @Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE,required=false)
    public void setUseClassCache(String val) {
        useClassCache = "true".equals(val);
    }
   
    @Inject
    public void setServletContext(ServletContext servletContext) {
  log.info ("Groovy Spring

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值