`
fatedgar
  • 浏览: 135147 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论
阅读更多
前提: springMVC项目已搭建好。

模拟:前台调后台Controller--->service---->groovy文件--->返回或者操作业务

创建处理Groovy的公用类
里面的存放groovy文件的地址可以改变,现在设为:C盘根目录
package com.gybr.util;

import groovy.lang.Binding;
import groovy.lang.GroovyObject;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException;
import groovy.util.ScriptException;

import java.io.IOException;

public class GroovyCommonUtil {
	static String root[]=new String[]{"C:\\"};  
    static GroovyScriptEngine groovyScriptEngine;  

    static{
        try {
            groovyScriptEngine=new GroovyScriptEngine(root);
        } catch (IOException e) {
            e.printStackTrace();
        }  
    }
    
    /**
     * 用于调用指定Groovy脚本中的指定方法 
     * @param scriptName    脚本名称
     * @param methodName    方法名称
     * @param params        方法参数
     * @return
     */
    @SuppressWarnings({ "rawtypes"})
    public static Object invokeMethod(String scriptName, String methodName, Object... params){
    	Object ret = null;
        Class scriptClass = null;
        GroovyObject scriptInstance = null;
        try {
            scriptClass = groovyScriptEngine.loadScriptByName(scriptName);
            scriptInstance = (GroovyObject)scriptClass.newInstance();
        } catch (ResourceException | ScriptException | InstantiationException | IllegalAccessException e1) {
            e1.printStackTrace();//此处应输出日志
        }

        try {
            ret = (String)scriptInstance.invokeMethod(methodName, params);
        } catch (IllegalArgumentException | SecurityException e) {
            e.printStackTrace();//此处应输出日志
        }
        return ret;
    }
    
    /**
     * 用于调用指定Groovy脚本 无方法
     * @param fileName   groovy文件名
     * @param binding    binding对象
     * @return
     */
    public static Object getNoFunctionGroovy(String fileName,  Binding binding){
//    	 GroovyScriptEngine engine;
 		try {
// 			engine = new GroovyScriptEngine("C:\\");
 			Object obj =groovyScriptEngine.run( fileName , binding);
 			System.out.println(binding.getVariable("show"));//获取groovy 的binding中值
			System.out.println(binding.getVariable("show1"));//获取 不加def的值
			//remove repeate key
//			binding.getVariables();

 			return obj;
 		} catch (ResourceException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		} catch (ScriptException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 		return null;
    }
    
}



项目的controller层
package com.gybr.web;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.gybr.service.TUserManager;

@Controller
@RequestMapping(value = "/user")
public class TUserController {
	
	private TUserManager tUserManager;
	
	@Autowired
	public void settUserManager(TUserManager tUserManager) {
		this.tUserManager = tUserManager;
	}
	
	@RequestMapping(value = {"groovy", ""})
    public void groovy(Model model,HttpServletRequest request,HttpServletResponse response) {
		PrintWriter out;
		try {
			out = response.getWriter();
			String str=tUserManager.TGroovy1();
			out.println(str);
			out.flush();
			out.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
	
}



项目的service层
package com.gybr.service;

import groovy.lang.Binding;
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException;
import groovy.util.ScriptException;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.gybr.dao.TUserDao;
import com.gybr.entity.TUser;
import com.gybr.util.GroovyCommonUtil;

@Component
@Transactional
public class TUserManager {
	 private TUserDao tUserDao;
	 
	 @PersistenceContext
    private EntityManager entityManager;
	 
	 @Autowired
	 public void settUserDao(TUserDao tUserDao) {
		this.tUserDao = tUserDao;
	}
	 
	 public TUser getTUser(Long id) {
        return tUserDao.findOne(id);
	 }

	 public List<TUser> getTUserList(){
		 return (List<TUser>) tUserDao.findAll();
	 }

	 @Transactional(readOnly = false)
	 public void saveTUser(TUser entity) {
        if (entity.getUid() == null) {
            entity.setName("155555");
            entity.setSex("男");
        }
        tUserDao.save(entity);
    }
	 
	 public String TGroovy1(){
		 Binding binding  =   new  Binding();
		 binding.setVariable( "world" ,  "Fatedgar" );
		 binding.setVariable( "hi" ,  " 你好!" );
		 TUser tUser=new TUser();
		 tUser.setName("fatedgar");
		 tUser.setSex("男");
		 binding.setVariable( "tu" ,  tUser );
		 binding.setVariable( "entityManager" ,  entityManager );
		 
		 String result = (String)GroovyCommonUtil.getNoFunctionGroovy("Test.groovy", binding);
		 
		 
		 return result;
	 }
	 
	 
	 
	 public String TGroovy2(){
		 String result = (String)GroovyCommonUtil.invokeMethod("hello.groovy", "helloWithoutParam");
		    System.out.println("testGroovy2: " + result + "\n");
		    return result;
	 }
	 
	 public String TGroovy3(){
		 TUser tUser = new TUser();
		 tUser.setName("fatedgar");
		 tUser.setSex("男");
		 String result = (String)GroovyCommonUtil.invokeMethod("hello.groovy", "helloWithParam", tUser, "testGroovy4");
		 System.out.println("testGroovy3: " + result + "\n");
		 return result;
	 }
	 
	 public String TGroovy4(){
//		 TUser tUser = new TUser();
//		 tUser.setName("fatedgar");
//		 tUser.setSex("男");
		 String result = (String)GroovyCommonUtil.invokeMethod("hello.groovy", "helloWithDao", tUserDao, 2);
		 System.out.println("testGroovy4: " + result + "\n");
		 return result;
	 }

	 public String TGroovy5(){
//		 TUser user=new TUser();
//		 user.setName("eeee");
//		 user.setSex("fff");
//		 entityManager.persist(user);
//		 return "";
		 String result = (String)GroovyCommonUtil.invokeMethod("hello.groovy", "helloWithEntity", entityManager,Long.parseLong("1"));
		 System.out.println("testGroovy5: " + result + "\n");
		 return result;
	 }
	 
}



groovy文件存放在C盘根目录
Test.Groovy
import com.gybr.entity.TUser;

def hw = "Hello, ${world}!"
def str="fatedgar  ${hi}"
//获取传过来的TUser对象
def ss=binding.variables.tu;
//获取传过来的EntityManager对象
def entityManager=binding.variables.entityManager;

def show="得到了我……"
binding.setVariable( "show" ,  show);//java接收可以从binding中取值
println hw+"This is my frist groovy demo"

show1="fffff";//类似 binding.setVariable( "show1" ,  "fffff");

def t=new TUser(name:'张三',sex:'男');
entityManager.persist(t);//保存数据库
return "|"+hw+"||"+str+"||" +ss.name +"|"+ss.getSex()


hello.groovy
package com.gybr.service;

import com.gybr.entity.TUser;
import com.gybr.entity.LeaveJpaEntity;


def helloWithoutParam(){
    println "start to call helloWithoutParam!"
    return "success, helloWithoutParam";
}

def helloWithParam(tUser, id){
    println "start to call helloWithParam, param{person:" + tUser + ", id:" + id + "}";

    return "success, hello-1--|"+tUser.name+"|"+tUser.getSex();
}

def helloWithDao(def tUserDao,def id){
	def t=tUserDao.findOne(id)
	return t.name+"||||"+t.sex;
}

def helloWithEntity(def entityManager,def id){
	def t=new TUser(name:'张三',sex:'ffff');
	entityManager.persist(t);
	
	def l=entityManager.find(LeaveJpaEntity.class, id);
	return l.reason;
}

输入访问路径:
http://localhost:8080/AG/user/groovy
即可显示效果。

注:整个工程中嵌入activiti,还在调试中 以后在activiti博客中上传
分享到:
评论

相关推荐

    Java调用Groovy,实时动态加载数据库groovy脚本

    1. 引入Groovy库:在Java项目中添加Groovy的相关依赖,通常是`groovy-all`,确保Java能够访问Groovy运行时环境。 2. 创建GroovyClassLoader:使用这个类加载器可以动态加载和执行Groovy脚本。它继承自Java的...

    SpringBoot-Gradle-Maven-Java-Groovy

    SpringBoot、Gradle、Maven、Java和Groovy是Java生态系统中的重要组成部分,它们在现代软件开发中扮演着至关重要的角色。这篇详细的知识点解析将深入探讨这些技术及其相互关系。 1. **SpringBoot**: SpringBoot是...

    Java中使用Groovy的三种方式

    在Java开发中,Groovy是一种强大的、动态类型的脚本语言,它可以无缝地与Java代码集成,为开发者提供了更简洁、灵活的语法。本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。...

    groovy和Java相互调用1

    标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...

    Java调用Groovy

    Java调用Groovy是一种常见的技术,特别是在开发过程中需要动态脚本支持时。Groovy是一种基于JVM(Java Virtual Machine)的、动态类型的编程语言,它与Java有着良好的互操作性,能够无缝集成到Java项目中。这篇博客...

    [Groovy] Making Java Groovy 英文版

    Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you...

    Java整合Groovy脚本笔记

    Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合...

    java与groovy互相调用1

    在Java和Groovy这两种语言中,互相调用代码是相当便捷的,因为它们可以无缝集成。Groovy是一种基于Java平台的脚本语言,它与Java有很高的互操作性,这使得开发者可以在同一个项目中混合使用Java和Groovy,充分利用...

    干货:Jenkins Pipeline调用shell、python、java、groovy脚本的正确使用姿势.doc

    Jenkins Pipeline 调用 shell、python、java、groovy 脚本的正确使用姿势 Jenkins Pipeline 是一个强大的自动化工具,可以帮助开发者自动化构建、测试和部署流程。在设计 Pipeline 脚本的过程中,经常会遇到调用...

    java、groovy、C#、Javascript性能比较

    java、groovy、C#、Javascript的运行效率到底如何? 通过实验比较,Javascript的运行效率解决java,看来基于javascript的html5前途远大。 C#的Release版的运行性能也相当高,和C++相差不大,值得推荐。 文件内部...

    hugo110-java_run_groovy-master_java_

    标题“hugo110-java_run_groovy-master_java_”表明这是一个关于使用Java运行Groovy脚本的项目,可能是某个GitHub仓库的克隆或归档。描述中提到,这个环境是为了方便用户(可能是开发者)实践Groovy语言,并为后续的...

    JGSK, Java,Groovy,Scala,Kotlin 四种语言的特点对比.zip

    Java、Groovy、Scala和Kotlin是四种在Java平台上广泛使用的编程语言,它们各自具有独特的特点和优势。这里我们将深入探讨这四种语言的核心特性,并对比它们在实际开发中的应用。 首先,Java作为最古老的成员,自...

    java_groovy_python集合

    在IT行业中,掌握多种编程语言是非常重要的,尤其是像Java、Groovy和Python这样的流行语言。这些语言各有特点,广泛应用于不同的领域。以下是对标题、描述和标签所提及的知识点的详细解析: 标题“java_groovy_...

    Java Groovy

    ### Java与Groovy:融合的力量 #### 知识点一:Java与Groovy的关系 - **定义**:Groovy是一种面向对象的编程语言,它直接运行在Java平台上,并且能够与现有的Java代码无缝集成。 - **特点**: - **语法简洁**:...

    java嵌入groovy所需jar 2.3.7最新版

    java嵌入groovy所需jar 2.3.7最新版

    Making Java Groovy源码

    Making Java Groovy Kenneth A. Kousen 1.Easier Java 2.Closures, builders, and metaprogramming 3.Gradle for builds, Spock for testing 4.Groovy frameworks like Grails and Griffon 源码

    Making Java Groovy--Kenneth.A.Kousen

    Making Java Groovy--Kenneth.A.Kousen. Java Groovy 很不错的学习资料

    java 动态脚本语言 精通 Groovy

    Groovy是一种基于Java平台的动态脚本语言,它在Java开发者中越来越受欢迎,因为它提供了简洁、灵活的语法,以及强大的动态编程能力。Groovy与Java兼容性极佳,可以直接调用Java类库,使得它在Java生态系统中具有广泛...

    Groovy+Java混合使用例子

    Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx

    groovy programming(2006.12).pdf

    《Groovy编程:Java开发者的入门指南》是Kenneth Barclay和John Savage为Java开发者编写的关于Groovy语言的详细介绍。此书首次出版于2006年,由Morgan Kaufmann Publishers出版,该出版社隶属于Elsevier集团。本书...

Global site tag (gtag.js) - Google Analytics