문제

우리는 그루비 스크립트를위한 메커니즘을 포함하여 크로스 컷팅을위한 공간을 확보하고 있습니다.

내 예에서는 웹 서비스 엔드 포인트가 Groovy Scripts로서 웹 서비스 프로토콜에 로그인하려고합니다. 이를 위해 우리는 암시 적 객체 (프레임 워크에서 얻음)를 사용하여 로깅 문을 만듭니다.

그러나 모든 웹 서비스 엔드 포인트에서 이것을 코딩하면 이것은 보일러 플레이트 코드입니다.

우리는 다른 그루비 스크립트를 포함하는 PHP의 포함 ()와 같은 것을 찾고 있습니다.이 작업을 수행하는 방법이 있습니까?

도움이 되었습니까?

해결책

이미“크로스 커팅 커넥트”를 언급 했으므로 웹 서비스 호출을 가로채야한다고 말합니다. AOP 스타일 (포함 메커니즘이 아님).

성배는 완전히 통합되어 있습니다 봄 프레임 워크, 따라서 스프링 AOP 기능을 악용하는 좋은 옵션이됩니다. Grails 공식 안내서 에서이 장을 살펴보십시오.http://grails.org/doc/latest/guide/14.%20Grails%20and%20Spring.html 그리고 단어 AOP를 검색하십시오.

아마도있을 수도 있습니다 순전히 그루비 방식 AOP를하고 있지만, 나는 성배와 봄과 함께 갈 것입니다.

다른 팁

Groovy는 파일을 객체로 취급합니다 (자동 포장으로 생각하십시오). 그리고 Java ClassPath 내의 모든 .groovy 파일을 클래스로 사용할 수 있습니다. 따라서 util.groovy 파일이있는 경우 내부에 이와 같은 내용이 포함되어 있습니다.

def static AuxMethod() {
    return "Hello World"
}

다른 파일에서 호출하려면 다음과 같습니다.

println util.AuxMethod()

그게 다야. 다시, util.groovy 파일이 클래스 경로에 있는지 확인하십시오.

스크립트를 호출하려면 u.groovy 현재 스크립트에서 원래 인수를 따라 U.Groovy에 전달, 실행

run(new File('u.groovy'), args)

분명히, 당신은 당신이 원하는 문자열 인수를 보낼 수도 있습니다.

run(new File('u.groovy'),
        ['one', new File('two.text').absolutePath] as String[])

평가 (파일) 함수를보십시오.

 Object evaluate(File file) 

http://groovy.codehaus.org/api/groovy/lang/script.html

나는 내가 만들고있는 도메인 특정 언어에 대해 이것에 대한 연구를했다. 세 가지 가능성이 있습니다.

  1. 부모 그루비 클래스를 상속하는 수업을 만듭니다. 공유 코드를 기본 클래스에 넣으십시오.

  2. scriptbaseclass see를 사용하십시오 http://groovy.codehaus.org/embedding+groovy . 이것은 모든 스크립트가 생성 될 클래스입니다.

  3. 가져 오기 정적 메소드 기능을 사용하십시오. Java 컨테이너 내부 에서이 작업을 수행 할 수 있습니다 ( http://mrhaki.blogspot.com/2011/06/groovy-goodness-add-imports.html ).

이 모든 작업은 훌륭합니다. 내가 선호하는 것은 ScriptBaseClass입니다. 이것은 공통 코드가 groovy (scriptbaseclass ~ 해야 하다 그루비 수업이 되십시오. Java 클래스가 될 수 없습니다.)

물론 이러한 모든 항목을 사용하면 실제로 그루비 코드에서 공통 방법을 호출해야합니다. 예를 들어:

doCommonStuff();
.
. do the rest of it here
.

너무 끔찍하지 않다고 생각합니다. 확실히 #include 프리 프로세서 명령문을 추가하는 것과 거의 같습니다.

마지막으로,이 모든 것은 Groovy 코드를 호출하는 Java 프로그램에 액세스 할 수 있다고 가정합니다. 그렇지 않은 경우 여전히 정적 가져 오기를 사용할 수 있습니다. 하나의 추가 코드 라인입니다.

import static com.mycompany.mycode.doCommonStuff
doCommonStuf()
.
. do the rest of it here
.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top