spring18-2:采用cglib字节码实现代理
没有接口,只有实现类。
采用字节码增强框架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字节码实现代理相关推荐
- object转class_从零并发框架(三)异步转同步注解+字节码增强代理实现
序言 上一节我们学习了异步查询转同步的 7 种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具. 思维导图如下: 异步转同步字节码增强 拓展阅读 java 手写并发框架 ...
- 查看动态代理生成的代理类字节码
文章目录 动态代理的知识介绍 用java proxy实现动态代理 查看生成的class代理类字节码 创建代理的源码 动态代理的知识介绍 一.动态代理和Class字节码的关系 动态代理有什么作用及应用场 ...
- 如何获取设计模式中动态代理的字节码文件
目录 保存jdk动态代理的字节码文件 保存cglib的字节码文件 获取字节码文件的目的主要是为了解惑,知道jdk动态代理必须使用委托类接口接收,知道cglib动态代理可以使用委托类来接收,查看编译后的 ...
- Cglib和jdk动态代理
前言:动态代理解决了方法之间的紧耦合,IOC解决了类与类之间的紧耦合. Cglib和jdk动态代理的区别? 1.Jdk动态代理:利用拦截器(必须实现InvocationHandler)加上反射机制生成 ...
- Cglib和jdk动态代理的区别
Cglib和jdk动态代理的区别 动态代理解决了方法之间的紧耦合, IOC解决了类与类之间的紧耦合! Cglib和jdk动态代理的区别? 1.Jdk动态代理:利用拦截器(必须实现InvocationH ...
- Java字节码技术(二)字节码增强之ASM、JavaAssist、Agent、Instrumentation
文章目录 前言 从AOP说起 静态代理 动态代理 JavaProxy CGLIB 字节码增强实现AOP ASM JavaAssist 运行时类加载 Instrumentation接口 JavaAgen ...
- 字节码和机器码的区别
机器码 机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的 CPU 可直接解读的数据. 通常意义上来理解的话,机器码就是计算机可以直接执行,并 ...
- asm(Java字节码操控框架)和 CGlib(Code Generation Library)
asm概述 asm 是一个 Java 字节码操控框架. 它能够以二进制形式修改已有类或者动态生成类.ASM 可以直接产生二进制 class 文件,也可以在类被加载入Java 虚拟机之前动态改变类行为. ...
- Java 动态代理与class字节码动态修改技术
代理分两种技术,一种是jdk代理(机制就是反射,只对接口操作),一种就是字节码操作技术.前者不能算技术,后者算是新的技术.未来将有大的动作或者较为广泛的应用和变革,它可以实现代码自我的编码(人工智能, ...
最新文章
- mysql 使用手册 权限_创建MySQL用户及用户权限管理
- 19岁白帽子通过bug悬赏赚到一百万美元--转
- pip安装的库导入pycharm中
- java实现背包问题例子_动态规划(背包问题)java实现
- linux怎么和windows互访,Linux和Windows操作系统远程互访的方法
- 不错的Unity教程
- axure文件如何加密_Axure发布到AxShare的加密与非加密方案 | 人人都是产品经理
- freeSWITCH之安装
- 博客前端模板源码(力荐)
- virtualxposed使用教程_无需Root也能使用Xposed框架 —— VirtualXposed v0.14.5
- 段码超低功耗LCD液晶显示驱动芯片(IC)-VKL系列-VKL128/060/076/144A/144B,VKL144A兼容MCP144
- 构建高并发高可用的电商平台架构实践(一)
- Pycharm2020.1.1最新版安装教程
- 东华OJ第85题 计算多项式的值
- 孔浩java爱酷网_孔浩老师JAVA WebService教程
- SteamVR 2.x 手柄拾取3D物体(13)
- 仿qq聊天程序设计之借鉴
- 雷达数据采集DCA1000EVM使用指南
- 文明使用计算机 教案,三年级信息技术上册- 文明上网守公约 教案
- 【HDOJ】1021 Fibonacci Again_天涯浪子_新浪博客
热门文章
- Android异常与性能优化相关面试问题-内存管理面试问题详解
- 《零基础入门学习Python》学习过程笔记【013元组】
- 【转】解决从jenkins打开robot framework报告会提示‘Opening Robot Framework log failed ’的问题...
- HTTPS Web配置举例
- 黑马Java学习笔记之-----单例模式
- android 开发错误点滴积累--Asset资源管理
- 利用TcpClient TcpListener 实现发送图片
- 谁来谈谈Google Earth的核心技术和架构?(转)
- 【ZooKeeper Notes 30】ZooKeeper与Diamond有什么不一样
- SQLAlchemy之SQL Expression