参考的学习视频→https://b23.tv/av47952931/p82
-特点:字节码随用随创建,随用随加载
-作用:不修改源码的基础上对方法增强
-分类:
- 基于接口的动态代理
- 基于子类的动态代理
▲基于接口的动态代理
-涉及的类:Proxy
-提供者:JDK官方
-如何创建代理对象:使用Proxy类中的newProxyInstance方法
-创建代理对象的要求:被代理类最少实现一个接口,否则不能使用
-newProxyInstance方法的参数:
- Classloader:类加载器
- 用于加载代理对象字节码,和被代理对象使用相同的类加载器(固定写法)
- Class[]:字节码数组
- 用于让代理对象和被代理对象有相同的方法(固定写法)
- InvocationHander:用于提供增强的代码
- 写如何代理,一般我们会写一个该接口的实现类,通常情况下为匿名内部类,但不是必须的
▲示例
新建MAVEN工程,配置POM文件,规定打包形式为JAR

新建一个接口类

定义接口类IProducer

IProducer接口定义了销售saleProduct和售后afterService两个方法

定义接口实现类Producer

Producer继承IProducer接口并实现其方法

模拟一个消费者Client

main函数中运用代理

运行结果

▲基于子类的动态代理
-涉及的类:Enhancer
-提供者:第三方cglib库
-如何创建代理对象:使用Enhancer类中的create方法
-创建代理对象的要求:被代理类不能是最终类
-create方法的参数:
- Class:字节码
- 用于指定被代理对象的字节码
- Callback:用于提供增强的代码
- 写如何代理,一般我们会写一个该接口的子接口实现类MethodInterceptor
▲示例
新建maven工程,pom文件加入cglib依赖

Producer与上例相同,不同之处在于它不再继承任何接口

而main函数中用Enhancer.create获取代理商

运行结果

来源:CSDN
作者:si_si_si
链接:https://blog.csdn.net/si_si_si/article/details/104750228