インターフェイスを実装するクラスを作成せずに、インターフェイスのプロキシを作成するにはどうすればよいですか?
具体的な例があります。Contact インターフェイスがあり、Contact として機能するプロキシ オブジェクトを作成する必要があります。このプロキシ オブジェクトは、一部の TestNG テストの実行に使用されます。
私は JDK アプローチを使用してみましたが、そのインターフェースの実際の実装を必要とする例しか見つけることができませんでした。
また、jassist がこの問題に役立つ可能性があることもわかり、メモリ不足エラーが発生するまで機能しているように見える簡単な例を実装しようとしました。ここに私がやっていることのスニペットがあります:
import javassist.util.proxy.MethodFilter;
import javassist.util.proxy.MethodHandler;
import javassist.util.proxy.ProxyFactory
protected final T createMock(final Class<T> clazz) {
final ProxyFactory factory = new ProxyFactory();
factory.setInterfaces(new Class[] { clazz });
factory.setFilter(new MethodFilter() {
public final boolean isHandled(final Method m) {
// ignore finalize()
return !m.getName().equals("finalize");
}
});
final MethodHandler handler = createDefaultMethodHandler();
try {
return (T) factory.create(new Class<?>[0], new Object[0], handler);
} catch (final Exception e) {
e.printStackTrace();
}
return null;
}
private MethodHandler createDefaultMethodHandler() {
return new MethodHandler() {
public final Object invoke(final Object self,
final Method thisMethod, final Method proceed,
final Object[] args) throws Throwable {
System.out.println("Handling " + thisMethod
+ " via the method handler");
return thisMethod.invoke(self, args);
}
};
}
createMock() メソッドのパラメーターはインターフェースになることに注意してください。
ありがとう