cglib实现动态代理
对目标方法实现前置或者后置增强,
是在程序动态运行时加入增强方法的。
1. 目标类
package com.lovely.proxy.cglib;/*** 目标类* @author echo lovely* @date 2020/7/26 15:20*/
public class Target {public void save() {System.out.println("sve running...");}
}
2. 增强类
package com.lovely.proxy.cglib;/*** 增强类 拿before和afterReturning对Target中save方法增强* @author echo lovely* @date 2020/7/26 15:20*/
public class Advice {public void before() {System.out.println("前置增强...");}public void afterReturning() {System.out.println("后置增强...");}}
3. 测试demo
package com.lovely.proxy.cglib;import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/*** cglib test* @author echo lovely* @date 2020/7/26 15:18*/
public class ProxyText {public static void main(String[] args) {// 创建目标类final Target target = new Target();// 增强类final Advice advice = new Advice();// 1 创建增强器Enhancer enhancer = new Enhancer();// 2 设置父类(目标类)enhancer.setSuperclass(target.getClass());// 3 设置回调enhancer.setCallback(new MethodInterceptor() { // 方法拦截器public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {advice.before(); // 方法增强Object returnValue = method.invoke(target, objects); // 调用目标方法advice.afterReturning(); // 后置方法return returnValue;}});// 4 创建代理对象Target proxy = (Target) enhancer.create();proxy.save();}}
cglib实现动态代理相关推荐
- JDK动态代理和Cglib的动态代理
2019独角兽企业重金招聘Python工程师标准>>> 最简单的是静态代理方法,即代理模式,这里就不多啰嗦了.. 重点说一下JDK的动态代理和Cglib的动态代理吧 先说JDK的,需 ...
- cglib实现动态代理构建带参数的代理实例
2019独角兽企业重金招聘Python工程师标准>>> cglib实现动态代理构建带参数的代理实例: package com.carl.test.proxy.cglib;import ...
- jdk中的动态代理和cglib中动态代理的区别
jdk中动态代理: 要求目标对象必须实现了某个接口. 代理对象和目标对象要想实现相同的功能,在底层的表现是代理对象和目标对象实现了相同的接口,因此获取代理对象后(Object类型),应该向下转型为目标 ...
- Java使用Proxy和CGLib实现动态代理
在java中对一个方法进行改造有几种方法可以实现,分别是最常用的继承(extends).动态代理和装饰者模式.继承是最简单也是用的最多的方法,但是还是有一些场景不适用,这个时候就可能会用到动态代理.使 ...
- Java之jdk和CGLib实现动态代理
1 jdk实现动态代理源码实现 这里需要用到InvocationHandler接口 public interface Hello {public void sayHello(); } public c ...
- 代理模式:aspectj静态代理和jdk,cglib的动态代理的对比
1.使用jdk的动态代理来增强接口实现类. 原理:使用Proxy类的newProxyInstance方法运行期通过反射动态的生成代理对象 优点:不需要修改具体的业务代码,动态的增强方法,降低耦合性. ...
- jdk与cglib的动态代理
JDK动态代理中包含一个类和一个接口: InvocationHandler接口: public interface InvocationHandler { public Object invok ...
- 使用CGLib实现动态代理
一.背景 在上一篇博客中(java动态代理:http://blog.csdn.net/wenhuayuzhihui/article/details/51700670)提到,java的动态代理是 ...
- 利用CGLib实现动态代理实现Spring的AOP
当我们用Proxy 实现Spring的AOP的时候, 我们的代理类必须实现了委托类的接口才能实现. 而如果代理类没有实现委托类的接口怎么办? 那么我们就可以通过CGLib来实现 package cn. ...
最新文章
- RuntimeError: maximum recursion depth exceeded
- 【leetcode 简单】第十一题 搜索插入位置
- Zookeeper实践与应用--分布式锁实现
- 分布式开放 消息系统 (RocketMQ) 的原理与实践
- 视频擦除方向研究(生成技术的一类)
- Maven多模块打包遇到的问题详解
- linux 查看文件内容的命令
- 方差分析、T检验、卡方分析如何区分?
- Ubuntu安装摄像头驱动
- MSTAR雷达数据集总结
- 线下WINDOWS主机挂载华为云存储
- 【我参加NVIDIA Sky Hackathon】CV篇
- Go模拟Kubernetes Client进行单元测试
- 文件 组织 服务器 数据库,nc文件服务器 数据库文件
- iOS模仿安卓Material Design的涟漪动画按钮
- android手机 手动 清理缓存,安卓手机缓存怎么清理_安卓手机清理缓存的具体步骤-系统城...
- 深度学习——模型量化、压缩及加速( MobileNets )
- C#根据IP地址和子网掩码计算广播地址
- 前端导出(JSON\数据流)
- java计算机毕业设计文物管理系统源码+数据库+系统+lw文档+mybatis+运行部署