您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
Java中的代理主要分为两种类型:静态代理和动态代理。下面是这两种代理的详细介绍:
// 定义接口
public interface Subject {
void request();
}
// 实现接口的具体类
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject: Handling request.");
}
}
// 代理类
public class StaticProxy implements Subject {
private RealSubject realSubject;
public StaticProxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
@Override
public void request() {
System.out.println("StaticProxy: Pre-processing before request.");
realSubject.request();
System.out.println("StaticProxy: Post-processing after request.");
}
}
// 使用代理
public class Client {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
StaticProxy proxy = new StaticProxy(realSubject);
proxy.request();
}
}
java.lang.reflect.Proxy
类和java.lang.reflect.InvocationHandler
接口来实现动态代理。import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
// 定义接口
public interface Subject {
void request();
}
// 实现接口的具体类
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject: Handling request.");
}
}
// 动态代理处理器
public class DynamicProxyHandler implements InvocationHandler {
private Object realSubject;
public DynamicProxyHandler(Object realSubject) {
this.realSubject = realSubject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("DynamicProxy: Pre-processing before request.");
Object result = method.invoke(realSubject, args);
System.out.println("DynamicProxy: Post-processing after request.");
return result;
}
}
// 使用动态代理
public class Client {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
InvocationHandler handler = new DynamicProxyHandler(realSubject);
Subject proxySubject = (Subject) Proxy.newProxyInstance(
realSubject.getClass().getClassLoader(),
realSubject.getClass().getInterfaces(),
handler
);
proxySubject.request();
}
}
除了上述两种常见的代理类型,Java中还有一些其他的代理技术:
选择哪种代理类型取决于具体的应用场景和需求。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。