JavaのProxyクラスは、動的にクラスを生成するための強力な仕組みです。このクラスは、特定のインターフェースを実装するプロキシオブジェクトを生成し、そのオブジェクトに対する呼び出しを処理できます。以下は、Proxyクラスの基本的な使い方です。
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
// インターフェースの定義
interface MyInterface {
void doSomething();
}
// 実際の処理を行うクラス
class MyImplementation implements MyInterface {
public void doSomething() {
System.out.println("実際の処理を実行");
}
}
// InvocationHandlerの実装
class MyInvocationHandler implements InvocationHandler {
private Object target;
public MyInvocationHandler(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("プロキシ経由でメソッドが呼び出されました");
return method.invoke(target, args);
}
}
public class ProxyExample {
public static void main(String[] args) {
MyInterface realObject = new MyImplementation();
MyInvocationHandler handler = new MyInvocationHandler(realObject);
// Proxyの生成
MyInterface proxyObject = (MyInterface) Proxy.newProxyInstance(
MyInterface.class.getClassLoader(),
new Class<?>[]{MyInterface.class},
handler
);
// プロキシ経由でメソッド呼び出し
proxyObject.doSomething();
}
}
この例では、Proxyクラスを使用してMyInterfaceを実装したクラスのプロキシを生成し、そのプロキシを介してメソッドが呼び出されるときに追加の処理を行っています。これは、AOP(アスペクト指向プログラミング)などで利用される手法の一部です。