2010-01-14 5 views
1

Java에서 특성을 검사해야하는 Expando 클래스가 있습니다. 그루비에서 : 자바에서Java 리플렉션으로 Groovy 오브젝트 특성 검사

def worker = new Expando() 
worker.name = "John" 
worker.surname = "Doe" 

:

Introspector.getBeanInfo(groovyObject.getClass()) 

는 그루비에서 개체에서 런타임에 클래스를 컴파일 할 수 있습니까?

답변

0

Expando는 완전히 동적입니다. 바이트 코드 getter 또는 setter를 생성하지 않으므로 JavaBean으로 사용할 수 없습니다. 빈 인트로 스펙터를 사용하려면 무엇이 필요합니까? Groovy로 작성하면 expando를 직접 사용하여 로직을 구현할 수 있습니다.

+0

해당 속성에 대해 바인딩을 만들 필요가 있습니다. 더 나은 바인딩을 사용하고 있으므로 인트로 스펙트에 의해 반환 된 BeanInfo는 expando 속성을 포함해야합니다. Groovy는 작은 스크립트에 임베디드되어 사용됩니다.이 경우에는 행 (GroovyRowResult 객체)을로드하는 것이지만 객체의 컨테이너는 Java에 있으며 바인딩 할 다른 객체와 같습니다. – escanda

0

Java 6을 사용하는 경우 Groovy (example here)를 사용하여 JSR 223/스크립트 엔진을 시험해 볼 수 있습니다. Java에서 Groovy 코드를 평가할 수 있습니다.

Expando의 위치/정의에 따라 getProperties() (Groovy 1.7 기준)을 평가하여 해당 속성을 가져올 수 있습니다.

+0

우리는 GroovyClassLoader를 사용하고 Java에서 객체를 사용하고 있습니다. 문제는 더 나은 바인딩을 사용하여 바인딩을 만들기 위해 Java 측의 bean 속성을 검사하는 것입니다. – escanda

관련 문제