java动态代理总结
一.cglib动态代理实现
1.使用:
1)使用Enhancer工具类创建代理类
Enhancer enhancer = new Enhancer();
enhancer.setCallback(this);
enhancer.setSuperclass(this.target.getClass());
Object proxy = enhancer.create();
2)编写代理回调:实现methodIntercepter接口重写intecpte方法
a. 实现 MethodInterceptor
b.重写intercept方法
public Object intercept(Object proxy, Method method, Object[] arguments, MethodProxy methodProxy);
2.说明:
1.可代理类和接口
2.代理类并不需要直接持有被代理类的引用,只是提供一个回调方法,通过实现接口编写回调方法,回调方法为业务操作
3.原理:
生成的代理类字节码中继承或者实现被代理类,并且持有代理增强回调MethodIncepter对象,代理方法中调用incepter方法
二. jdk代理动态实现
1.使用:
1)Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h)创建代理类和代理类对象
2.编写代理回调:实现InvocationHandler接口,重写public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;方法
2.说明:
1) 只可以代理接口
2) 代理类并不需要直接持有被代理类的引用,只是提供一个回调方法,通过 实现接口编写回调方法,回调方法为业务操作
3.原理:
生成一个实现了被代理接口,并且继承了Proxy的类,因此只可以代理接口, 若代理类则创建代理时会报错。代理类中持有增强描述类InvocationHandler类的对象,调用invoke方法进行方法增强
原文地址:https://www.cnblogs.com/mk190705/p/15314207.html
- WordPress By Example:一个WordPress 主题搜索引擎
- jquery mobile 移动web(4)
- [C#6] 3-null 条件运算符
- ServiceStack.Redis 使用教程
- WordPress 标签页面只有一篇文章时自动跳转到该文章
- OS X 上使用.NET开发应用程序
- [C#6] 2-nameof 运算符
- Key-Value Coding(KVC),Key-Value Observing(KVO)和Cocoa Bindings for MonoMac
- [C#6] 7-索引初始化器
- jquery mobile 移动web(3)
- 卷积神经网络详解(二)——自己手写一个卷积神经网络
- VS 2010 SP1的一个功能(添加可部署依赖项)
- 一组扁平化组件推荐下载(PSD 格式)
- [C#6] 6-表达式形式的成员函数
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- git提取两次提交或者版本的差异文件并打包成zip压缩包
- 博客通用版Live2d伊斯特瓦尔发布
- 一个小需求,自动重启k8s集群中日志不刷新的POD
- 多图,一文了解 8 种常见的数据结构
- Jenkins--pipline 流水线部署Java后端项目
- 微信小程序修炼之路LV1—工具介绍篇
- CentOS 7 部署OpenLDAP+FreeRadius
- 手把手教你使用yolo进行对象检测
- K8s之Helm工具详解
- 技术创作101训练营——上古神器Gvim--从入门到精通
- 关于linux7下编写crontab任务执行mysqldump备份无效
- 黑暗中的YOLO:解决黑夜里的目标检测 | ECCV 2020
- Elasticsearch:Java 运用示例
- 【5分钟玩转Lighthouse】搭建个人云盘
- Elasticsearch:Index alias