groovy代码动态加载运行实战
来源:互联网 发布:女生网络名称大全 编辑:程序博客网 时间:2024/05/16 06:18
Groovy是什么:
它是新一代java,也是运行在JVM中,有自己更简练的语法,更像脚本语言,但是其也支持JAVA语法
1. 插件安装
打开idea, preferences -> Plugins -> 搜索Groovy,找到然后点击安装;如果没有搜到,那么添加repositories:http://dist.codehaus.org/groovy/distributions/update/
2. 创建groovy项目
2.1 New -> Project -> Java Project 创建一个java项目
2.2 New -> Groovy Class 创建groovy类,后缀为.groovy
import java.text.SimpleDateFormatclass GrvyCalculator { //groovy语法 def discount(a,b){ def c = a * b } //java语法 int add(int a, int b){ return a + b; } //java语法 String add(Map<Integer, String> map){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date dateValue = sdf.parse("2017-12-08 08:00:00"); String var1 = map.get(0); String var2 = map.get(1); String var3 = map.get(2); StringBuilder sb = new StringBuilder(); return sb.append(var1).append("_").append(var2).append("_").append(var3).append("_").append(dateValue.format("yyyy-MM-dd HH:mm:ss")); }}
2.3 添加maven依赖
<dependency> <groupId>org.codehaus.gmaven.runtime</groupId> <artifactId>gmaven-runtime-1.8</artifactId> <version>1.4</version> <exclusions> <exclusion> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions></dependency><dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>1.8.7</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions></dependency>
3. 实例化groovy类,并调用方法,新建java测试类
方式一: new一个groovy对象
public class GroovyTest { public static void main(String[] args){ Map<Integer, String> map = Maps.newHashMap(); map.put(0, "a"); map.put(1, "b"); map.put(2, "c"); Calculator calculator = new Calculator(); System.out.println("discount=" + calculator.discount(10, 0.8)); System.out.println("add=" + calculator.add(1,2)); System.out.println("addStr=" + calculator.addStr(map)); }}
结果:
discount=8.0
add=3
addStr=a_b_c
方式二:用GroovyClassLoader动态编译Groovy类并实例化
public static void main(String[] args){ Map<Integer, String> map = Maps.newHashMap(); map.put(0, "a"); map.put(1, "b"); map.put(2, "c"); ClassLoader cl = new CalculatorTest().getClass().getClassLoader(); GroovyClassLoader grvyCl = new GroovyClassLoader(cl); //将上面新建的Calculaotr.groovy类的代码放到grvyCalculatorFile的本地文件中 String grvyClassConcent = FileHelper.readFileContent("/Users/jimmy.wj/Documents/work/grvyCalculatorFile"); Class groovyClass = grvyCl.parseClass(grvyClassConcent); try { GroovyObject grvyObj = (GroovyObject) groovyClass.newInstance(); System.out.println("addStr=" + grvyObj.invokeMethod("addStr", map)); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }
结果:invokeMethod方法只有两个参数,第一个参数是方法名,第二个参数是方法的入参,类型是Object;其他两个方法因为有多个入参,这里不适用。
addStr=a_b_c
4. 用GroovyClassLoader动态编译Groovy代码片段
groovy方法可以单独存在,不一定要写在class中,比如我在本地文件grvyPartFile中仅把addStr方法的代码放进去,用上述的方法二,一样可以实例化groovy对象(应该是个匿名类)
public static void main(String[] args){ Map<Integer, String> map = Maps.newHashMap(); map.put(0, "a"); map.put(1, "b"); map.put(2, "c"); ClassLoader cl = new CalculatorTest().getClass().getClassLoader(); GroovyClassLoader grvyCl = new GroovyClassLoader(cl); //将上面新建的Calculaotr.groovy类的代码放到grvyPartFile的本地文件中 String grvyClassConcent = FileHelper.readFileContent("/Users/jimmy.wj/Documents/work/grvyPartFile"); Class groovyClass = grvyCl.parseClass(grvyClassConcent); try { GroovyObject grvyObj = (GroovyObject) groovyClass.newInstance(); System.out.println("addStr=" + grvyObj.invokeMethod("addStr", map)); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }结果:
addStr=a_b_c
推荐groovy的入门文章,基本语法整理的不错
http://blog.csdn.net/kmyhy/article/details/4200563
阅读全文
0 0
- groovy代码动态加载运行实战
- Java中运行动态脚本Groovy
- Java中运行动态脚本Groovy
- 在Java中运行Groovy代码
- 基于Groovy实现Spring Bean的动态加载
- groovy运行期间动态添加属性和方法
- groovy运行期间动态添加属性和方法
- 对Groovy运行期动态方法的认识
- 实战 Groovy: Groovy:Java 程序员的 DSL——用 Groovy 编写更少的代码,完成更多的工作
- 视频电商网站实战 - 逐步完善代码结构、动态加载导航栏
- 实战javascript之动态加载js和动态加载css
- 实战 Groovy: 用 Groovy 进行 JDBC 编程
- 实战 Groovy: Groovy:Java 程序员的 DSL
- 实战 Groovy: Groovy:Java 程序员的 DSL
- 实战 Groovy(3)- Groovy中的SwingBuilder 简介
- Java利用反射动态加载类实战
- EditPlus 编写运行 Groovy
- Android动态加载代码技术
- IE6与CSS样式兼容问题汇总
- org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止。
- java环境报错(项目报红叉)Java compiler level does not match解决方法
- Android获取屏幕宽度的4种方法
- 配置wamp server3.0.6让局域网用户都可以访问你的服务器
- groovy代码动态加载运行实战
- Raid5数据恢复原理_两块盘离线数据恢复方法
- RTPSession流媒体编程
- markdown转html
- Unity_Transform.GetSiblingIndex()
- 文章标题
- Guava字符串处理Joiner、Splitter
- spring cloud搭建eureka+zuul+hystrix+config
- C++文件读写详解(ofstream,ifstream,fstream)