에서 그루비 클래스를 프록시. 예,이 그루비 클래스를 고려하십시오검사 CGLIB 내가 그루비는 반환 및 매개 변수 유형이 방법에 대해 무엇을 배우고, 자바에서 그루비 클래스를 프록시 일부 CGLIB의 메소드를 생성 검사하기 위해 노력하고있어 자바
class Person {
String name
}
그루비의 이름 속성에 대한 getName()
및 setName()
방법을 생성합니다. getName()
은 아마도 String
을 반환하고 setName()
은 아마도 String
을 취합니다.
그러나 CGLIB를 통해이 클래스를 프록시와 CGLIB의 MethodInterceptor, method.getName()
반환 getMetaClass
및 method.getReturnType()
반환 groovy.lang.MetaClass
를 사용하여 getName
에 대한 호출을 차단합니다.
실제 메소드 이름을 배우고 MethodInterceptor 내부에서 형식을 반환하는 방법이 있나요?
편집 : A와 속성을 요청할 때
ExplicitMappingInterceptor.intercept(Object, Method, Object[], MethodProxy) line: 42
GroovyMMTester$A$$EnhancerByCGLIB$$915b5b4.getMetaClass() line: not available
CallSiteArray.createPogoSite(CallSite, Object, Object[]) line: 144
CallSiteArray.createCallSite(CallSite, Object, Object[]) line: 161
CallSiteArray.defaultCall(CallSite, Object, Object[]) line: 45
AbstractCallSite.call(Object, Object[]) line: 108
AbstractCallSite.call(Object) line: 112
GroovyMMTester$Map.configure() line: 18 <-- Person.getName() call is in here, but doesn't show
무슨 이유 CGLIB를 사용하지 [메타 클래스 (http://groovy.codehaus.org/Evaluating+the+MetaClass+runtime)? – ChrLipp
당신이 호출하는 것은 Person 객체의 getName()이며 직접 Person.getName()이 아닙니다. 권리? – Alfergon