简介
groovy 是用于jvm 执行的一种动态语言,既可以用于面向对象编程又可以作为一种脚本语言使用;
groovy特性
可以用java 执行groovy脚本动态编码,代码修改达到不重启服务的目的(类似热部署)
核心特性:
GroovyClassLoader 是一个定制的类装载器,用于解释和加载java中的groovy类
使用步骤:
1、引入groovy依赖
<!--Groovy脚本依赖-->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>2.5.14</version>
</dependency>
2、创建接口
public interface CallAnalysis {
default void load() {
}
}
3、在resources目录下创建.groovy文件
package groovy
import com.example.groovy.testgroovy.task.CallAnalysis
import groovy.util.logging.Slf4j
@Slf4j
class CallAnalysisImpl implements CallAnalysis{
@Override
void load() {
log.info("我被Groovy脚本加载...")
}
}
4、创建Groovy脚本装载类,动态解析脚本为Class
package com.example.groovy.testgroovy.task;
import groovy.lang.GroovyClassLoader;
public class GroovyUtils {
private final static ClassLoader classLoader = GroovyUtils.class.getClassLoader();//获取当前类装载器
//ClassLoader:就是类的装载器,它使JVM可以动态的载入Java类,JVM并不需要知道从什么地方(本地文件、网络等)载入Java类,这些都由ClassLoader完成。
public final static GroovyClassLoader groovyClassLoader = new GroovyClassLoader(classLoader);
//GroovyClassLoader:负责在运行时编译groovy源代码为Class的工作,从而使Groovy实现了将groovy源代码动态加载为Class的功能。
/**
* .
* 获取实例化对象
* @param script groovy脚本内容
* @param <T>
* @return
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static <T> T instanceTaskGroovyScript(String script) throws IllegalAccessException, InstantiationException {
Class taskClz = groovyClassLoader.parseClass(script);
T instance = (T) taskClz.newInstance();
return instance;
}
}