阅读量:0
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); } }
运行上述代码,可以看到代理对象会在处理请求之前和之后输出一些额外的信息。这样就实现了代理转发请求的功能。