JAVA 에서 Groovy 를 실행 합 니 다.

21980 단어 groovy
Groovy 는 경량급 과 쉽게 끼 워 넣 을 수 있 는 응용 프로그램 시스템 으로 설계 되 었 다.
1.Groovy 스 크 립 트 사례
def run(foo) {
       println 'Hello World!'
       x = 123
       foo * 10
}
 
run foo

l         Groovy 스 크 립 트 샘플 은 run()함 수 를 포함 하고 마지막 에 run()을 호출 하여 결 과 를 되 돌려 줍 니 다.
l         run()을 호출 할 때 전달 하 는 매개 변 수 는 foo 속성 입 니 다.(스 크 립 트 를 실행 할 때 외부 에서 속성 값 을 제공 합 니 다)
 
2、Groovy Shell 을 사용 하여 Groovy 스 크 립 트 실행
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
 
import java.io.File;
 
public class EmbedGroovy {
 
    private Binding binding = new Binding();
 
    public Object getProperty(String name) {
        return binding.getProperty(name);
    }
 
    public void setParameters(String[] paramNames, Object[] paramValues) {
        int len = paramNames.length;
        if (len != paramValues.length) {
            System.out.println("parameters not match!");
        }
 
        for (int i = 0; i < len; i++) {
            binding.setProperty(paramNames[i], paramValues[i]);
        }
    }
 
    public Object runScript(String scriptName) {
        GroovyShell shell = new GroovyShell(binding);
        try {
            return shell.evaluate(new File(scriptName));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
 
    public static void main(String[] args) {
        EmbedGroovy embedGroovy = new EmbedGroovy();
        String[] paramNames = { "foo" };
        Object[] paramValues = { new Integer(2) };
        embedGroovy.setParameters(paramNames, paramValues);
        Object result = embedGroovy.runScript("src/Foo.groovy");
        System.out.println(result);
        System.out.println(embedGroovy.getProperty("foo"));
        System.out.println(embedGroovy.getProperty("x"));
    }
}

l         Groovy Shell 의 evaluate()방법 으로 지정 한 파일 의 Groovy 스 크 립 트 를 실행 하고 실행 결 과 를 되 돌려 줍 니 다(있 으 면)
l         Binding 의 setProperty()방법 을 사용 하여 Groovy 스 크 립 트 가 실행 되 기 전에 필요 한 속성 값 을 설정 할 수 있 습 니 다.Groovy Shell 대상 을 만 들 때 이 Binding 대상 을 제공 합 니 다.
l         마찬가지 로,다음 코드 에서 사용 할 수 있 도록 Binding 의 getProperty()방법 을 사용 하여 Groovy 스 크 립 트 가 실 행 된 후에 지정 한 속성 값 을 얻 을 수 있 습 니 다.
l         Groovy 스 크 립 트 에서 정의 하 는 변수(예 를 들 어 x)는 Binding 의 속성 으로 접근 할 수 있 습 니 다.
l         위의 예 를 통 해 알 수 있 듯 이 자바 에서 Groovy 스 크 립 트 를 실행 하면 입력 도 할 수 있 고 출력 도 할 수 있 습 니 다.따라서 Groovy 스 크 립 트 를 기능 모듈 로 하여 구체 적 인 기능 을 실현 하여 인 코딩 효율 을 높 일 수 있 습 니 다.
 
3.자바 에서 Groovy 코드 를 동적 으로 불 러 오고 실행 합 니 다.
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
 
import java.io.File;
 
public class DynamicGroovy {
 
private GroovyObject groovyObject;
 
    public Object getProperty(String name) {
        return groovyObject.getProperty(name);
    }
    
    public Object invokeScriptMethod(String scriptName, String methodName, Object[] args) {
        ClassLoader parent = getClass().getClassLoader();
        GroovyClassLoader loader = new GroovyClassLoader(parent);
        try {
            Class groovyClass = loader.parseClass(new File(scriptName));
            groovyObject = (GroovyObject) groovyClass
                    .newInstance();
            return groovyObject.invokeMethod(methodName, args);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
 
    public static void main(String[] args) {
        DynamicGroovy dynamicGroovy = new DynamicGroovy();
        Object[] params = {new Integer(2)};
        Object result = dynamicGroovy.invokeScriptMethod("src/Foo.groovy", "run", params);
        System.out.println(result);
        System.out.println(dynamicGroovy.getProperty("x"));
        
    }
}

l         Groovy ClassLoader 를 사용 하면 자바 프로그램 에서 Groovy 클래스 를 동적 으로 불 러 오고 실행 할 수 있 습 니 다(호출 방법)
l         GroovyClassLoader 의 parseClass()방법 은 지정 한 파일 의 Groovy 스 크 립 트 를 분석 하여 해당 하 는 Groovy 클래스 를 생 성하 고 불 러 옵 니 다.
l         Groovy Object 인터페이스의 인 스 턴 스 를 만 들 수 있 습 니 다.invokeMethod()방법 으로 Groovy 류 를 호출 하 는 방법 입 니 다.
l         invokeMethod()방법의 두 매개 변 수 는 각각 Groovy 류 의 방법 이름과 이 방법 에 전 달 된 매개 변수 목록 배열 에 대응 합 니 다.
l         Groovy Object 의 getProperty()방법 으로 Groovy 류 의 지정 속성 치 를 얻 을 수 있 습 니 다.
l         여 기 는 Groovy 류 에 매개 변수 값 을 직접 전달 하 는 방법 입 니 다.앞의 방식 이 아니 라 Binding 의 속성 을 통 해 간접 적 으로 매개 변수 값 을 Groovy 류 에 전달 하 는 방법 입 니 다.

좋은 웹페이지 즐겨찾기