javaでプロキシ転送リクエストを実現する方法
ネイティブに転送リクエストを作成するために Java は動的プロキシを使用できます。動的プロキシとは、実行時に与えられたインターフェースを実装するプロキシクラスを作成するプロセスです。以下は、単純なサンプルコードです。
まず、リクエストを処理するためのインターフェイスのRequestHandlerを定義する
public interface RequestHandler {
String handleRequest(String request);
}
続いて、リクエストハンドリングを行う対象クラスRealRequestHandlerを実装し、RequestHandlerインターフェースを実装する
public class RealRequestHandler implements RequestHandler {
public String handleRequest(String request) {
// 处理请求的具体逻辑
return "处理结果";
}
}
プロキシリクエストを処理する前にまたは後にいくつかの追加処理を行うInvocationHandlerインタフェースを実装する代理クラスProxyRequestHandlerを作成します。
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class ProxyRequestHandler implements InvocationHandler {
private RequestHandler realHandler;
public ProxyRequestHandler(RequestHandler realHandler) {
this.realHandler = realHandler;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 在处理请求之前进行一些额外的操作
System.out.println("请求处理之前");
// 调用实际处理请求的对象
Object result = method.invoke(realHandler, args);
// 在处理请求之后进行一些额外的操作
System.out.println("请求处理之后");
return result;
}
}
最後に、Proxyクラスを使用して代理オブジェクトを作成し、そのメソッドを呼び出します。
import java.lang.reflect.Proxy;
public class Main {
public static void main(String[] args) {
RequestHandler realHandler = new RealRequestHandler();
ProxyRequestHandler proxyHandler = new ProxyRequestHandler(realHandler);
RequestHandler proxy = (RequestHandler) Proxy.newProxyInstance(
Main.class.getClassLoader(),
new Class[]{RequestHandler.class},
proxyHandler);
String result = proxy.handleRequest("请求参数");
System.out.println(result);
}
}
上述のコードの実行によって、プロキシオブジェクトは要求の処理前後に追加の情報をアウトプットする様子を確認できる。これにより、プロキシによる要求転送機能が実現する。