动态代理

Posted lihui001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态代理相关的知识,希望对你有一定的参考价值。

一:什么是动态代理?为什么要用动态代理?

  在开发中,有时候会发现先前写好的类中的某个方法的原有功能不够用,需要增加额外功能。但是修改源代码增加功能是开发大忌,不到万不得已时不能这样做,这时候就需要动态代理来帮忙了。

  动态代理就是设计模式中的代理模式

 

二:动态代理概念:

  1. 真实对象:被代理的对象

  2. 代理对象:对真实对象的功能(方法)进行
  3. 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的

 

三:实现步骤:

  1. 代理对象和真实对象实现相同的接口

  2. 代理对象 = Proxy.newProxyInstance();
  3. 增强方法
  4. 使用代理对象调用方法。

 

四:代码实现:

  需求:computer对象里有个sell方法,里面实现了卖电脑的原始功能,现在想在sell方法里增加打八折的功能

  技术图片

  1. Proxy.newProxyInstance方法的三个参数:

                      1. 类加载器:真实对象.getClass().getClassLoader()
                      2. 接口数组:真实对象.getClass().getInterfaces()
                      3. 处理器:new InvocationHandler()
  2. InvocationHandler类的invoke的三个参数
                      1. o:代理对象
                      2. method:代理对象调用的方法,被封装为的对象
                      3. objects:代理对象调用的方法时,传递的实际参数

 

以上是关于动态代理的主要内容,如果未能解决你的问题,请参考以下文章

动态代理模式——JDK动态代理

动态代理

设计模式 结构型模式 -- 代理模式(动态代理(JDK动态代理(JDK动态代理要求必须定义接口,对接口进行代理。)动态代理原理(使用arthas-boot.jar查看代理类的结构)动态代理的作用)(代

动态代理——JDK中的动态代理

Spring 静态代理+JDK动态代理和CGLIB动态代理

(java反射-JDK动态代理)+CGLIB动态代理