Java可以使用動態代理來實現代理轉發請求。動態代理是在運行時創建一個實現了給定接口的代理類的過程。以下是一個簡單的示例代碼:
首先,定義一個接口RequestHandler
,用于處理請求:
public interface RequestHandler {
String handleRequest(String request);
}
然后,創建一個實現RequestHandler
接口的目標類RealRequestHandler
,用于實際處理請求:
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);
}
}
運行上述代碼,可以看到代理對象會在處理請求之前和之后輸出一些額外的信息。這樣就實現了代理轉發請求的功能。