代理方式详解
什么是代理?
代理(Proxy)是一种设计模式,它提供了对目标对象的一种间接访问方式,在代理模式中,客户端不直接与目标对象交互,而是通过代理对象进行交互,代理对象负责处理与目标对象的通信,可以在客户端和目标对象之间添加一些额外的功能,如缓存、安全检查、日志记录等。
代理的分类
根据代理对象的创建方式和实现功能的不同,代理可以分为以下几种类型:
1、静态代理
2、动态代理
3、远程代理
4、虚拟代理
5、保护代理
6、智能引用代理
代理的实现方式
1、静态代理
静态代理是在编译时期就确定了代理类和被代理类的关系,在静态代理中,代理类和被代理类通常都实现同一个接口或者继承同一个抽象类。
示例代码:
public interface Subject { void doSomething(); } public class RealSubject implements Subject { @Override public void doSomething() { System.out.println("RealSubject do something"); } } public class ProxySubject implements Subject { private RealSubject realSubject; public ProxySubject(RealSubject realSubject) { this.realSubject = realSubject; } @Override public void doSomething() { System.out.println("ProxySubject do something before"); realSubject.doSomething(); System.out.println("ProxySubject do something after"); } }
2、动态代理
动态代理是在运行时期动态生成代理类,在Java中,可以通过实现java.lang.reflect.InvocationHandler
接口和java.lang.reflect.Proxy
类来实现动态代理。
示例代码:
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class DynamicProxyHandler implements InvocationHandler { private Object target; public DynamicProxyHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("DynamicProxyHandler do something before"); Object result = method.invoke(target, args); System.out.println("DynamicProxyHandler do something after"); return result; } }
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/792042.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复