对目标方法实现前置或者后置增强,
是在程序动态运行时加入增强方法的。

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实现动态代理相关推荐

  1. JDK动态代理和Cglib的动态代理

    2019独角兽企业重金招聘Python工程师标准>>> 最简单的是静态代理方法,即代理模式,这里就不多啰嗦了.. 重点说一下JDK的动态代理和Cglib的动态代理吧 先说JDK的,需 ...

  2. ​cglib实现动态代理构建带参数的代理实例

    2019独角兽企业重金招聘Python工程师标准>>> cglib实现动态代理构建带参数的代理实例: package com.carl.test.proxy.cglib;import ...

  3. jdk中的动态代理和cglib中动态代理的区别

    jdk中动态代理: 要求目标对象必须实现了某个接口. 代理对象和目标对象要想实现相同的功能,在底层的表现是代理对象和目标对象实现了相同的接口,因此获取代理对象后(Object类型),应该向下转型为目标 ...

  4. Java使用Proxy和CGLib实现动态代理

    在java中对一个方法进行改造有几种方法可以实现,分别是最常用的继承(extends).动态代理和装饰者模式.继承是最简单也是用的最多的方法,但是还是有一些场景不适用,这个时候就可能会用到动态代理.使 ...

  5. Java之jdk和CGLib实现动态代理

    1 jdk实现动态代理源码实现 这里需要用到InvocationHandler接口 public interface Hello {public void sayHello(); } public c ...

  6. 代理模式:aspectj静态代理和jdk,cglib的动态代理的对比

    1.使用jdk的动态代理来增强接口实现类. 原理:使用Proxy类的newProxyInstance方法运行期通过反射动态的生成代理对象 优点:不需要修改具体的业务代码,动态的增强方法,降低耦合性. ...

  7. jdk与cglib的动态代理

    JDK动态代理中包含一个类和一个接口:  InvocationHandler接口:  public interface InvocationHandler {  public Object invok ...

  8. 使用CGLib实现动态代理

    一.背景     在上一篇博客中(java动态代理:http://blog.csdn.net/wenhuayuzhihui/article/details/51700670)提到,java的动态代理是 ...

  9. 利用CGLib实现动态代理实现Spring的AOP

    当我们用Proxy 实现Spring的AOP的时候, 我们的代理类必须实现了委托类的接口才能实现. 而如果代理类没有实现委托类的接口怎么办? 那么我们就可以通过CGLib来实现 package cn. ...

最新文章

  1. RuntimeError: maximum recursion depth exceeded
  2. 【leetcode 简单】第十一题 搜索插入位置
  3. Zookeeper实践与应用--分布式锁实现
  4. 分布式开放 消息系统 (RocketMQ) 的原理与实践
  5. 视频擦除方向研究(生成技术的一类)
  6. Maven多模块打包遇到的问题详解
  7. linux 查看文件内容的命令
  8. 方差分析、T检验、卡方分析如何区分?
  9. Ubuntu安装摄像头驱动
  10. MSTAR雷达数据集总结
  11. 线下WINDOWS主机挂载华为云存储
  12. 【我参加NVIDIA Sky Hackathon】CV篇
  13. Go模拟Kubernetes Client进行单元测试
  14. 文件 组织 服务器 数据库,nc文件服务器 数据库文件
  15. iOS模仿安卓Material Design的涟漪动画按钮
  16. android手机 手动 清理缓存,安卓手机缓存怎么清理_安卓手机清理缓存的具体步骤-系统城...
  17. 深度学习——模型量化、压缩及加速( MobileNets )
  18. C#根据IP地址和子网掩码计算广播地址
  19. 前端导出(JSON\数据流)
  20. java计算机毕业设计文物管理系统源码+数据库+系统+lw文档+mybatis+运行部署

热门文章

  1. 前端学习(1620):前端系列实战课程之提取行间样式
  2. java学习(25):三目运算符
  3. 基于域名的apache服务器
  4. 前端布局之网格gird布局(简单易懂)
  5. CSS3属性之text-indent文本缩进使用详解
  6. python appium自动化测试平台开发,Python+Appium实现自动化测试
  7. lombok依赖_为什么有些公司不让用 Lombok ?不要问,自己看吧
  8. 集合计数 (容斥原理)
  9. 字符串转16进制字节数组,字节数组转16进制字符串
  10. C#操作XML之——读取XML文件