没有接口,只有实现类。

采用字节码增强框架cglib, 在运行时,创建目标类的子类,从而对目标类进行增强。

实现类,没有实现任何接口

public class UserServiceImpl {public void addUser() {System.out.println("cglib adduser...");}public void updateUser() {System.out.println("cglib updateUser...");}
}

切面

public class MyAspect {public void before(){System.out.println("cglib 事务开启");}public void after(){System.out.println("cglib 事务结束");}
}

工厂,产生代理类

import java.lang.reflect.Method;import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;public class BeanFactory {public static  UserServiceImpl createProxyService(){final UserServiceImpl userService = new UserServiceImpl();final MyAspect myAspect = new MyAspect();// 核心类 Enhancer enhancer = new Enhancer();// 确定父类enhancer.setSuperclass(UserServiceImpl.class);// 设置回调函数enhancer.setCallback(new MethodInterceptor() {// 等效于jdk中的invoke方法@Overridepublic Object intercept(Object proxy, Method method, Object[] args,MethodProxy methodProxy) throws Throwable {myAspect.before();// 执行目标类的方法Object obj = method.invoke(userService, args);myAspect.after();return obj;}});// 创建代理UserServiceImpl proxyService = (UserServiceImpl)enhancer.create();return proxyService;}
}

测试类:

import org.junit.Test;public class TestProxy {@Testpublic void test(){UserServiceImpl us = BeanFactory.createProxyService();us.addUser();us.updateUser();}
}

spring18-2:采用cglib字节码实现代理相关推荐

  1. object转class_从零并发框架(三)异步转同步注解+字节码增强代理实现

    序言 上一节我们学习了异步查询转同步的 7 种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具. 思维导图如下: 异步转同步字节码增强 拓展阅读 java 手写并发框架 ...

  2. 查看动态代理生成的代理类字节码

    文章目录 动态代理的知识介绍 用java proxy实现动态代理 查看生成的class代理类字节码 创建代理的源码 动态代理的知识介绍 一.动态代理和Class字节码的关系 动态代理有什么作用及应用场 ...

  3. 如何获取设计模式中动态代理的字节码文件

    目录 保存jdk动态代理的字节码文件 保存cglib的字节码文件 获取字节码文件的目的主要是为了解惑,知道jdk动态代理必须使用委托类接口接收,知道cglib动态代理可以使用委托类来接收,查看编译后的 ...

  4. Cglib和jdk动态代理

    前言:动态代理解决了方法之间的紧耦合,IOC解决了类与类之间的紧耦合. Cglib和jdk动态代理的区别? 1.Jdk动态代理:利用拦截器(必须实现InvocationHandler)加上反射机制生成 ...

  5. Cglib和jdk动态代理的区别

    Cglib和jdk动态代理的区别 动态代理解决了方法之间的紧耦合, IOC解决了类与类之间的紧耦合! Cglib和jdk动态代理的区别? 1.Jdk动态代理:利用拦截器(必须实现InvocationH ...

  6. Java字节码技术(二)字节码增强之ASM、JavaAssist、Agent、Instrumentation

    文章目录 前言 从AOP说起 静态代理 动态代理 JavaProxy CGLIB 字节码增强实现AOP ASM JavaAssist 运行时类加载 Instrumentation接口 JavaAgen ...

  7. 字节码和机器码的区别

    机器码 机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的 CPU 可直接解读的数据. 通常意义上来理解的话,机器码就是计算机可以直接执行,并 ...

  8. asm(Java字节码操控框架)和 CGlib(Code Generation Library)

    asm概述 asm 是一个 Java 字节码操控框架. 它能够以二进制形式修改已有类或者动态生成类.ASM 可以直接产生二进制 class 文件,也可以在类被加载入Java 虚拟机之前动态改变类行为. ...

  9. Java 动态代理与class字节码动态修改技术

    代理分两种技术,一种是jdk代理(机制就是反射,只对接口操作),一种就是字节码操作技术.前者不能算技术,后者算是新的技术.未来将有大的动作或者较为广泛的应用和变革,它可以实现代码自我的编码(人工智能, ...

最新文章

  1. mysql 使用手册 权限_创建MySQL用户及用户权限管理
  2. 19岁白帽子通过bug悬赏赚到一百万美元--转
  3. pip安装的库导入pycharm中
  4. java实现背包问题例子_动态规划(背包问题)java实现
  5. linux怎么和windows互访,Linux和Windows操作系统远程互访的方法
  6. 不错的Unity教程
  7. axure文件如何加密_Axure发布到AxShare的加密与非加密方案 | 人人都是产品经理
  8. freeSWITCH之安装
  9. 博客前端模板源码(力荐)
  10. virtualxposed使用教程_无需Root也能使用Xposed框架 —— VirtualXposed v0.14.5
  11. 段码超低功耗LCD液晶显示驱动芯片(IC)-VKL系列-VKL128/060/076/144A/144B,VKL144A兼容MCP144
  12. 构建高并发高可用的电商平台架构实践(一)
  13. Pycharm2020.1.1最新版安装教程
  14. 东华OJ第85题 计算多项式的值
  15. 孔浩java爱酷网_孔浩老师JAVA WebService教程
  16. SteamVR 2.x 手柄拾取3D物体(13)
  17. 仿qq聊天程序设计之借鉴
  18. 雷达数据采集DCA1000EVM使用指南
  19. 文明使用计算机 教案,三年级信息技术上册- 文明上网守公约 教案
  20. 【HDOJ】1021 Fibonacci Again_天涯浪子_新浪博客

热门文章

  1. Android异常与性能优化相关面试问题-内存管理面试问题详解
  2. 《零基础入门学习Python》学习过程笔记【013元组】
  3. 【转】解决从jenkins打开robot framework报告会提示‘Opening Robot Framework log failed ’的问题...
  4. HTTPS Web配置举例
  5. 黑马Java学习笔记之-----单例模式
  6. android 开发错误点滴积累--Asset资源管理
  7. 利用TcpClient TcpListener 实现发送图片
  8. 谁来谈谈Google Earth的核心技术和架构?(转)
  9. 【ZooKeeper Notes 30】ZooKeeper与Diamond有什么不一样
  10. SQLAlchemy之SQL Expression