我正在尝试从Java端检查一些CGLib代理的Groovy类生成的方法,以了解这些方法的返回类型和参数类型。例如,考虑以下Groovy类:
Groovy为name属性生成
但是,当通过CGLib代理此类并拦截针对
有没有办法从MethodInterceptor内部了解实际的方法名称和返回类型?
编辑:这是拦截Person.getName()调用时的调用堆栈:
class Person {
String name
}
Groovy为name属性生成
getName()
和setName()
方法。getName()
可能会返回一个String
,而setName()
可能会接受一个String
。但是,当通过CGLib代理此类并拦截针对
getName
的调用时,使用CGLib的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