动态代理(JDK 、CGLIB)

1.意义

动态代理的意义在于生成一个代理对象,来代理真实对象,从而控制真实对象的访问。

2.代理的作用

代理的作用就是,在真实对象访问之前或者之后加入对应的逻辑,或者根据其他规则控制是否使用真实对象。

3.java中动态代理技术

  如 JDK  CGLIB Javassist  ASM .常用的有两种,JDK CGIB

4.JDK动态代理

前提:java.lang.reflect.*包提供的方式  使用反射技术,必须借助一个借口才能产生代理对象。   要实现代理逻辑类,必须要实现java.lang.reflect.InvocationHandler接口,其中定义了一个invoke方法,用来代理方法逻辑的实现。

接口:

动态代理(JDK 、CGLIB)_第1张图片

接口实现,重写方法:

动态代理(JDK 、CGLIB)_第2张图片


建立代理对象与真实对象之间的关系,并实现代理关系:

动态代理(JDK 、CGLIB)_第3张图片


main中实现:

动态代理(JDK 、CGLIB)_第4张图片
method.invoke处会调用接口实现类中的方法。

5.CGLIB动态代理

跟JDK不同的是CGLIB实现不需要借助接口,只需要导入核心包就可以使用了。(spring-core-xxxx.jar).创建动态代理类实现接口MethodIntersepter,重写invoke方法。


动态代理(JDK 、CGLIB)_第5张图片


动态代理(JDK 、CGLIB)_第6张图片


动态代理(JDK 、CGLIB)_第7张图片

你可能感兴趣的:(动态代理(JDK 、CGLIB))