メソッドの戻り値とパラメーターの型が何であるかを知るために、Java から、いくつかの CGLib プロキシされた Groovy クラスで Groovy によって生成されたメソッドを調べようとしています。例として、次の Groovy クラスを検討してください。
class Person {
String name
}
Groovyは name プロパティのメソッドを生成getName()します。おそらく aを返し、おそらく a を取ります。setName()getName()StringsetName()String
しかし、CGLib を介してこのクラスをプロキシし、getNameCGLib のMethodInterceptorを使用して呼び出しをインターセプトすると、method.getName()戻り値getMetaClassとmethod.getReturnType()戻り値が返されますgroovy.lang.MetaClass。
MethodInterceptor内から実際のメソッド名と戻り値の型を学習する方法はありますか?
編集: Person.getName() の呼び出しをインターセプトするときのコール スタックは次のとおりです。
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