Java之动态代理java 动态代理
可以简单理解成代理商经营模式。代理对象对真实的对象进行动态代理,我们的需求本来是需要访问真实的对象才可以完成,如果存在代理对象,那么我们也可以将需求发给代理对象,代理对象去调用真正的对象也可完成我们的需求。
动态代理的几个概念
2、代理对象
3、代理模式:代理对象代理真实对象,达到一种增强真实对象功能的目的
静态代理:有一个java类文件来描述代理模式
动态代理:在内存中形成代理类
实现动态代理的流程
2、Proxy.newinstance获取代理对象
3、使用代理对象调用方法(因为实现了相同的接口,所以会实现相同的方法)
Proxy.newProxyInstance()
Proxy.newProxyInstance()会返回一个代理对象
Proxy.newProxyInstance()会返回一个代理对象
该方法有三个参数
1、类加载器:真实对象.getClass().getClassLoader()
2、实现的接口:真实对象.getClass().getInterfaces()
3、处理器:new InvocationHandler()
invoke方法
处理代理逻辑的方法:代理对象调用的所有方法的执行都会触发该方法执行
参数:
1、proxy 代理对象
2、method:代理对象调用的方法,会被封装成Method类的method对象传入invoke方法中
3、args:代理对象调用方法时,传递到该方法内的实际参数
例子:
接口
public interface SaleComputer { public String Sale(double money); public void show(); }真实对象类
public class Lenovo implements SaleComputer{ @Override public String Sale(double money) { System.out.println("花了" + money + "元买了一台Lenovo电脑"); return "Lenovo Computer"; } @Override public void show() { System.out.println("展示电脑..."); } }动态代理实现类
public class ProxyTest { public static void main(String[] args) { //动态代理真实对象 /* Proxy.newProxyInstance()会返回一个代理对象 该方法有三个参数 1、类加载器:真实对象.getClass().getClassLoader() 2、实现的接口:真实对象.getClass().getInterfaces() 3、处理器:new InvocationHandler() */ SaleComputer proxy = (SaleComputer) Proxy.newProxyInstance(lenovo.getClass().getClassLoader(), lenovo.getClass().getInterfaces(), new InvocationHandler() { //代理逻辑的方法:代理对象调用的所有方法的执行都会触发该方法执行 /* 参数: 1、proxy 代理对象 2、method:代理对象调用的方法,会被封装成Method类的method对象传入invoke方法中 3、args:代理对象调用方法时,传递到该方法内的实际参数 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理方法执行了"); System.out.println(method); System.out.println(args[0]); return null; } }); //调用方法 String computer = proxy.Sale(8000); System.out.println(computer); } }总结
动态代理其实就是一种设计模式,为了达到增强对象功能的目的。
在安全中,比如cc链也会经常用到动态代理的特性,即代理对象调用的所有方法的执行都会触发处理器Invoke方法的执行。
所有内容仅限于维护网络安全学习参考Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理jdk静态代理和动态代理
Java动态代理之JDK动态代理和CGLib动态代理jdk动态代理
谁与争锋,JDK动态代理大战CGLib动态代理jdk动态代理和cglib动态代理
代理模式之静态代理,JDK动态代理和cglib动态代理jdk cglib动态代理
java中的静态代理、jdk动态代理和cglib动态代理jdk cglib动态代理
Java JDK中的静态代理、动态代理&Cglib动态代理jdk cglib动态代理
快速理解 Java 静态代理 / 动态代理java静态代理和动态代理