在Java中,拦截器(Interceptor)通常用于在方法调用前后执行一些操作,例如日志记录、权限检查等。拦截器可以通过多种方式实现,其中一种常见的方法是使用动态代理。下面是一个简单的示例,展示了如何使用Java动态代理实现请求拦截:
public interface RequestHandler {
void handleRequest(String request);
}
public class RequestHandlerImpl implements RequestHandler {
@Override
public void handleRequest(String request) {
System.out.println("处理请求: " + request);
}
}
InvocationHandler接口:import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class RequestInterceptor implements InvocationHandler {
private Object target;
public RequestInterceptor(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 在方法调用前执行拦截操作
System.out.println("请求拦截: " + args[0]);
// 调用实际的方法
Object result = method.invoke(target, args);
// 在方法调用后执行拦截操作
System.out.println("请求处理完成: " + args[0]);
return result;
}
}
Proxy.newProxyInstance()方法创建一个代理对象,并将拦截器作为参数传入:import java.lang.reflect.Proxy;
public class Main {
public static void main(String[] args) {
// 创建目标对象
RequestHandler target = new RequestHandlerImpl();
// 创建拦截器
RequestInterceptor interceptor = new RequestInterceptor(target);
// 创建代理对象
RequestHandler proxy = (RequestHandler) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
interceptor
);
// 通过代理对象调用方法
proxy.handleRequest("Hello, World!");
}
}
运行上述代码,你将看到以下输出:
请求拦截: Hello, World!
处理请求: Hello, World!
请求处理完成: Hello, World!
这就是一个简单的Java拦截器实现。你可以根据实际需求在拦截器中添加更多的功能,例如权限检查、日志记录等。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。