【发布时间】:2013-05-08 09:38:32
【问题描述】:
简而言之: 1. 我有一些最终类,我想为它创建动态代理。我该怎么做? 2. MethodHandle可以转成Method吗?
详情 首先,是否存在将 MethodHandle 转换为 Method 的 API?类似于 java.lang.invoke.MethodHandles 的东西
public MethodHandle unreflect(Method m) throws IllegalAccessException;
但是反过来呢?
假设我想创建动态 java.lang.reflect.Method。它被视为
public final
class Method extends AccessibleObject implements GenericDeclaration,
Member ;
所以,如果我想使用 JDK 动态代理,我必须使用一些接口(例如成员)。虽然有两个主要缺点。一、方法如
public Class<?>[] getParameterTypes();
比如
public Class<?> getReturnType();
不是任何界面的一部分,但它们被广泛使用。
第二个缺点是它无法提供直接替换。也就是说,我无法将我的动态代理传递给需要 java.lang.reflect.Method 的代码。
另一种方法是使用 CGLIB 或 Javaassist。 AFAIK,CGLIB 不能代理最终课程,是吗? Javaassist 可以代理最终类吗?如何从课程中“删除”最终标识符?失败了,Javvassist 可以以某种方式做到这一点...
【问题讨论】:
标签: java proxy mocking powermock cglib