【发布时间】:2011-05-23 14:32:46
【问题描述】:
JDK Proxy 类只接受工厂方法 newProxyInstance() 中的接口。
是否有可用的解决方法或替代实现? 如果我必须将方法提取到接口以使它们能够与代理一起使用,则用例是有限的。我想包装它们以在运行时应用基于注释的操作。
public static <T> T getProxy(T obj) {
InvocationHandler ih = new InjectProxy( obj );
ClassLoader classLoader = InjectProxy.class.getClassLoader();
return (T) Proxy.newProxyInstance( classLoader, obj.getClass().getInterfaces(), ih );
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
【问题讨论】:
-
嗯,原则上你可以使用像 ASM 这样的字节码库来自己创建一个基于类的代理。
-
@Krik,一些单元测试模拟库会这样做。您需要创建一个派生类来覆盖您想要的方法。 (自动或手动)
-
您是否考虑过 Aspect-J 旨在做这种事情?
-
@Peter Lawrey 我希望使用核心 java 的解决方案。
-
您可以为派生类创建代码并在运行时编译/加载它。您可以使用 Compiler API 来执行此操作。
标签: java dynamic-proxy