Javassist 是一个开源的分析、编辑和创建Java字节码的类库. 其主要优点在于简单快速. Javassist的重要组成 Javassist中最为重要的是ClassPool, CtClass, CtMethod以及CtField这几个类. String getValue(String key) { return key; } } 2.2 增强 如何在不修改代码的前提下, 增加一段简单逻辑: 在返回结果前, 将参数打印出来 在方法体中插入增强语句 整个流程虽然非常简单, 但合理利用javassist API会完成更多功能. 三. ; // 类的字节码文件 ClassFile classFile = ctClass.getClassFile(); // 编译成字节码文件, 使用当前线程上下文类加载器加载类, 如果类已存在或者编译失败将抛出异常
AOP的实现一般使用了动态代理和字节码修改,本文介绍使用javassist实现类的创建和修改 添加依赖 <dependency> <groupId>org.javassist</groupId > <artifactId>javassist</artifactId> <version>3.28.0-GA</version> </dependency> 使用字节码创建一个类 初始化 attempted duplicate class definition for name: "XXX" 因为对应的类信息已经加载,就不能修改了,否则就是重复定义 参考 Getting Started with Javassist
个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。
今天,我们就一起使用Javassist来动态生成JavaBean对象。 <properties> <javassist.version>3.20.0-GA</javassist.version> </properties> <dependencies> < dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> 案例总结 我们使用Javassist动态生成了符合预期的User类对象,通过本文的学习,我们掌握了如何使用Javassist生成JavaBean对象。是不是很简单呢? 附录 文中涉及到了Javassist中方法内部的引用变量0和 1 , 在Javassist中,还有一些其他的方法内部引用变量,冰河将其进行了总结,以方便大家学习。
CtClass javassist为每个需要编辑的class都创建了一个CtClass对象,通过对CtClass对象的操作来实现对class的编辑工作。
一、前言 通过前面两篇 javassist 的基本内容,大体介绍了;类池(ClassPool)、类(CtClass)、属性(CtField)、方法(CtMethod),的使用方式,并通过创建不同类型的入参出参方法 那么,今天我们尝试使用 javassist 去修改一个正在执行中的类里面的方法内容。 二、开发环境 JDK 1.8.0 jdk1.8.0_161\lib\tools.jar - 需要使用到 jdi 包 javassist 3.12.1.GA 三、案例目标 为了让案例目标更具色彩,我们模拟一个谢飞机老婆 javassist.tools.HotSwapper,是 javassist 的包中提供的热加载替换类操作。在执行时需要启用 JPDA(Java平台调试器体系结构)。 Javassist 对 ASM 这样的字节码操作封装起来提供的API确实很好操作,在一些场景下也不需要考虑 JVM 中局部变量和操作数栈。但如果需要更高的性能,可以考虑使用 ASM。
MyJDKProxy mp = new MyJDKProxy(); XXX ap = (XXX) mp.getInstance(new APerformer()); ap.XX(); 三、Java javassist 动态代理 package org.windwant.spring.core.proxy; import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; /** * Created by windwant on 2016/9/18. */ public class MyJavassistProxy
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
一、前言 在字节码编程方面有三个比较常见的框架;ASM、byte-buddy、Javassist,他们都可以对这字节码进行操作,只是操作方式和控制粒度不同。 相关源码可以通过关注 公众号:bugstack虫洞栈 获取 二、开发环境 JDK 1.8.0 javassist 3.12.1.GA <dependency> <groupId>javassist 也就可以看到通过我们使用 Javassist 生成类的样子。 最后就是我们的反射调用 main 方法,测试输出结果。 使用Javassist生成的类 [使用Javassist生成的类,在工程文件夹下] 2. 输出的测试结果 javassist hi helloworld by 小傅哥(bugstack.cn) Process finished with exit code 0 六、总结 关于 Javassist
❞ 一、前言 在字节码编程方面有三个比较常见的框架;ASM、byte-buddy、Javassist,他们都可以对这字节码进行操作,只是操作方式和控制粒度不同。 相关源码可以通过关注 公众号:bugstack虫洞栈 获取 二、开发环境 JDK 1.8.0 javassist 3.12.1.GA <dependency> <groupId>javassist 也就可以看到通过我们使用 Javassist 生成类的样子。 最后就是我们的反射调用 main 方法,测试输出结果。 使用Javassist生成的类 ? 使用Javassist生成的类,在工程文件夹下 2. 输出的测试结果 javassist hi helloworld by 小傅哥(bugstack.cn) Process finished with exit code 0 六、总结 关于 Javassist
org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer
于是试图安装增强功能,报错如图: 文字内容: Could not mount the media/drive 'C:\Program Files\Oracle\VirtualBox/VBoxGuestAdditions.iso
为了在virtualbox里面的Fedora安装增强工具废了不少功夫,如果刚装的fedora上来就安装增强工具,肯定会出现错误: Building the main Guest Additions module [失败] 这是因为fedora需要安装开发者内核才能使用增强工具 1、首先用su切换到根用户 2、用yum下载安装以下包: make gcc-c++ (gcc-c++非常重要,一定要先装) 一定要先安装gcc和gcc-c++,再安装下面两个kernel,否则kernel无法完全编译 还是不能成功安装增强工具
要使用Javassist,要先在POM中添加 <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId > <version>3.3</version> </dependency> 我们先使用Javassist来动态创建一个类,代码如下 public class JavassistMain { return this.age; } } 这个时候我们可以看到age属性被添加了进去 前面我们讲过Java动态代理,CGLib动态代理,具体请参考 AOP原理与自实现 现在来看看Javassist
---- 官网 http://www.javassist.org/ http://www.javassist.org/tutorial/tutorial.html ---- 概述 Javassist是一个开源的分析 Javassist简单易用, 快速。 ---- Javassist作用 运行时监控插桩埋点 AOP动态代理实现(性能上比Cglib生成的要慢) 获取访问类结构信息:如获取参数名称信息 ---- 常用API 类 说明 ClassPool Javassist ---- Javassist使用流程 ? ---- Demo 依赖 <dependency> <groupId>org.javassist</groupId> <artifactId>javassist
图像增强是图像模式识别中非常重要的图像预处理过程。 图像增强的目的是通过对图像中的信息进行处理,使得有利于模式识别的信息得到增强,不利于模式识别的信息被抑制,扩大图像中不同物体特征之间的差别,为图像的信息提取及其识别奠定良好的基础。 图像增强按实现方法不同可分为点增强、空域增强和频域增强。 点增强 点增强主要指图像灰度变换和几何变换。 因此,根据需要可以分别增强图像的高频和低频特征。对图像的高频增强可以突出物体的边缘轮廓,从而起到锐化图像的作用。例如,对于人脸的比对查询,就需要通过高频增强技术来突出五宫的轮廓。 相应地,对图像的低频部分进行增强可以对图像进行平滑处理,一般用于图像的噪声消除。 频域增强 图像的空域增强一般只是对数字图像进行局部增强,而图像的频域增强可以对图像进行全局增强。
大家好,我是冰河~ 字节码编程在实际的业务开发(CRUD)中并不常用,但是随着网络编程,RPC、动态字节码增强技术和自动化测试以及零侵入APM监控的不断发展与大量使用,越来越多的技术需要使用到字节码编程 好了,我们今天就使用Javassist动态生成一个HelloWorld案例,可以直接到Github和Gitee获取。 <properties> <javassist.version>3.20.0-GA</javassist.version> </properties> <dependencies> < dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> Javassist Hello World by 冰河(公众号:冰河技术) Process finished with exit code 0 案例总结 我们使用Javassist实现了创建一个HelloWorld
一、Javassist入门 (一)Javassist是什么 (二)Javassist核心API (三)简单示例 二、Javassist操作字节码示例 (一)新增一个方法 (二)新增一个变量 (三)给变量新增 相关链接 一、Javassist入门 (一)Javassist是什么 Javassist是可以动态编辑Java字节码的类库。 Javassist使用户不必关心字节码相关的规范也是可以编辑类文件的。 /html/index.html 2、javassist的github开源地址 https://github.com/jboss-javassist/javassist 3、javassist的官网 http ://www.javassist.org/ 4、javassist官方的英文教程 http://www.javassist.org/tutorial/tutorial.html
当我用Springboot和mybatis进行延迟加载时候报出如下的错误: org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory
扫码关注腾讯云开发者
领取腾讯云代金券