java动态代理cglib基于子类代码增强案例
2020-03-29 13:00
288 查看
相对于Proxy不同的是,Proxy是基于接口的动态代理,而cglib是子类的
第一步导入cglib的jar包
<dependencies> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.2.12</version> </dependency> </dependencies>
普通类
public class Producer { /** * 销售 * @param money */ public void saleProduct(float money) { System.out.println("销售产品:并拿到钱"+money); } /** * 售后 * @param money */ public void afterService(float money){ System.out.println("提供售后,并拿到钱"+money); } }
测试类
/** * 模拟一个消费者 * @author DELL */ public class Client { public static void main(String[] args) { final Producer producer = new Producer(); // producer.saleProduct(10000f); /** * 基于子类的动态代理 * 基于子类的动态代理: * 涉及的类: Enhancer * 提供者:第三方cglib库 * 创建代理对象: 使用Enhancer类中的create方法 * 创建代理对象的要求: * 被代理类不能是最终类 * * class 字节码 * 它是用于指定被代理对象的字节码 * * Callback用于增强的代码 */ Producer cglibProduce = (Producer)Enhancer.create(producer.getClass(), new MethodInterceptor() { /** * 执行该方法的任何方法都会经过该方法 * @param o * @param method * @param objects * @param methodProxy 当前执行方法的代理对象 * * @return * @throws Throwable */ @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { //提 供增强的代码 Object returnValue = null; //1.获取方法执行的参数 Float money = (Float)objects[0]; if("saleProduct".equals(method.getName())){ returnValue = method.invoke(producer, money*0.8f); } return returnValue; } }); cglibProduce.saleProduct(10000f); } }
可用看出拦截方法之后和Proxy的处理大同小异
Proxy实现代理
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Java 基于接口、子类的动态代理实现【详细】
- java 中动态代理(JDK,cglib)实例代码
- java的代理与动态代理与cglib子类代理
- java反射--动态代理学习案例代码
- Java的静态代理、动态代理,CGLib的动态代理,使用动态代理基于AOP的AspectJ框架—深入探究
- [置顶] Java的静态代理、动态代理,CGLib的动态代理,使用动态代理基于AOP的AspectJ框架—深入探究
- java动态代理(JDK和cglib)代码完整版本
- Java的静态代理、动态代理,CGLib的动态代理,使用动态代理基于AOP的AspectJ框架—深入探究
- java动态代理(JDK和cglib)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- java动态代理(JDK和cglib)
- java动态代理(JDK和cglib)
- java的cglib动态代理报java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter
- java动态代理代码学习
- java动态代理cglib详细说明
- Java动态代理二——CGLIB动态代理应用
- java动态代理2 (cglib 不用实现接口)
- 网摘-java静态代理和动态代理例子(jdk动态代理和cglib动态代理)
- Java动态代理(JDK,CGLib)
- Java下的Framework编写(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)(1)--序