字节码编程
文章平均质量分 94
本专栏主要针对字节码编程系列知识栈进行编写文章学习。在字节码编程方便有三个比较常见的框架;ASM、Javassit、Byte-buddy,他们都可以使用自己的API方式进行字节码的插装,通过这样增强方法的方式就可以和Javaagent结合起来开发非入侵的全链路监控服务,以及做反射、中间件和混淆代码等
小傅哥
博客 bugstack.cn - 汇总所有文章 | 一线互联网软件开发工程师,擅长编写优秀的代码、中间件开发、架构设计等。| 公众号:bugstack虫洞栈,回复:设计模式、面经手册、字节码编程,可以下载我的PDF!
展开
-
调研字节码插桩技术,用于互联网分布式系统监控设计和实现!
作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!????一、来自深夜的电话!咋滴,你那上线的系统是裸奔呢?周末熟睡的深夜,突然接到老板电话☎的催促。“赶紧看微信、看微信,咋系统出问题了,我们都不知道,还得用户反馈才知道的!!!”深夜爬起来,打开电脑连上 VPN ,打着哈欠、睁开朦胧的眼睛,查查系统日志,原来是系统挂了,赶紧重启恢复!虽然重启恢复了系统,也重置了老板扭曲的表情。但系统是怎么挂的呢,因为没有一个监控系统,也不知道是流量太大导致原创 2021-07-19 09:33:19 · 2277 阅读 · 6 评论 -
11 万字的字节码编程系列合集放送(ASM、Javassist、Byte-buddy、Javaagent)
作者:小傅哥博客:https://bugstack.cn - 汇总系列原创专题文章沉淀、分享、成长,让自己和他人都能有所收获!????让人怪不好意思的,说是出书有点膨胀????,毕竟这不是走出版社的流程,选题、组稿、编著、审读、加工到出版发行。但全书共计107页,11万7千字,20个章节涵盖三个字节码框架和JavaAgent使用并附带整套案例源码!讲道理,市面上以及网络搜索中都基本很少有成体系的关于字节码编程的知识,这主要由于大部分开发人员其实很少接触这部分内容,包括;ASM、Javassi原创 2020-05-18 08:17:22 · 3743 阅读 · 6 评论 -
字节码编程,Byte-buddy篇三《使用委托实现抽象类方法并注入自定义注解信息》
作者:小傅哥博客:https://bugstack.cn - 汇总系列专题文章沉淀、分享、成长,让自己和他人都能有所收获!一、前言截至到本章节关于字节码框架 Byte-buddy 的大部分常用 API 的使用已经通过案例介绍比较全面了,接下来介绍关于如何去实现一个抽象类以及创建出相应注解(包括类的注解和方法的注解)的知识点。而注解的这部分内容在一些监控或者拦截处理的场景下还是比较常用的,所以在这章节我们会通过一个例子来创建出含有自定义注解的类和方法。如果你已经阅读了之前的系列文章,这部分学习.原创 2020-05-15 09:06:04 · 2756 阅读 · 7 评论 -
字节码编程,Byte-buddy篇二《监控方法执行耗时动态获取出入参类型和值》
作者:小傅哥博客:https://bugstack.cn - 汇总系列专题文章沉淀、分享、成长,让自己和他人都能有所收获!一、前言案例是剥去外衣包装展示出核心功能的最佳学习方式!就像是我们研究字节码编程最终是需要应用到实际场景中,例如:实现一款非入侵的全链路最终监控系统,那么这里就会包括一些基本的核心功能点;方法执行耗时、出入参获取、异常捕获、添加链路ID等等。而这些一个个的功能点,最快的掌握方式就是去实现他最基本的功能验证,这个阶段基本也是技术选型的阶段,验证各项技术点是否可以满足你后续开.原创 2020-05-13 09:10:45 · 3226 阅读 · 5 评论 -
字节码编程,Byte-buddy篇一《基于Byte Buddy语法创建的第一个HelloWorld》
作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!一、前言相对于小傅哥之前编写的字节码编程; ASM、Javassist 系列,Byte Buddy 玩法上更加高级,你可以完全不需要了解一个类和方法块是如何通过 指令码 LDC、LOAD、STORE、IRETURN… 生成出来的。就像它的官网介绍;Byte Buddy 是一个代码生成和操作库,用于在 Java 应用程序运行时创建和修改 Java 类,而无需编译器的帮助。除了 Java 类库附带.原创 2020-05-09 09:08:40 · 2984 阅读 · 5 评论 -
字节码编程,Javassist篇五《使用Bytecode指令码生成含有自定义注解的类和方法》
作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!一、前言到本章为止已经写了四篇关于字节码编程的内容,涉及了大部分的API方法。整体来说对 Javassist 已经有一个基本的使用认知。那么在 Javassist 中不仅提供了高级 API 用于创建和修改类、方法,还提供了低级 API 控制字节码指令的方式进行操作类、方法。有了这样的 ...原创 2020-04-30 09:20:30 · 3056 阅读 · 9 评论 -
字节码编程,Javassist篇四《通过字节码插桩监控方法采集运行时入参出参和异常信息》
作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!一、前言字节码编程插桩这种技术常与 Javaagent 技术结合用在系统的非入侵监控中,这样就可以替代在方法中进行硬编码操作。比如,你需要监控一个方法,包括;方法信息、执行耗时、出入参数、执行链路以及异常等。那么就非常适合使用这样的技术手段进行处理。为了能让这部分最核心的内容体现出来...原创 2020-04-28 09:14:29 · 2807 阅读 · 5 评论 -
字节码编程,Javassist篇三《使用Javassist在运行时重新加载类「替换原方法输出不一样的结果」》
作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!一、前言通过前面两篇 javassist 的基本内容,大体介绍了;类池(ClassPool)、类(CtClass)、属性(CtField)、方法(CtMethod),的使用方式,并通过创建不同类型的入参出参方法,基本可以掌握如何使用这样的代码结构进行字节码编程。那么,今天我们尝试使用...原创 2020-04-22 08:57:31 · 2812 阅读 · 4 评论 -
字节码编程,Javassist篇二《定义属性以及创建方法时多种入参和出参类型的使用》
作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!一、前言在上一篇 Helloworld 中,我们初步尝试使用了 Javassist字节编程的方式,来创建我们的方法体并通过反射调用运行了结果。大致了解到创建在使用字节码编程的时候基本离不开三个核心类;ClassPool、CtClass、CtMethod,它们分别管理着对象容器、类和方法...原创 2020-04-21 09:31:08 · 2316 阅读 · 14 评论 -
字节码编程,Javassist篇一《基于javassist的第一个案例helloworld》
作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!目录文章目录目录一、前言二、开发环境三、案例目标四、技术实现五、测试结果1. 使用Javassist生成的类2. 输出的测试结果六、总结一、前言在字节码编程方面有三个比较常见的框架;ASM、byte-buddy、Javassist,他们都可以对这字节码进行操作,只是操作方式和控制粒...原创 2020-04-20 08:55:56 · 2008 阅读 · 2 评论 -
ASM字节码编程 | 如果你只写CRUD,那这种技术栈你永远碰不到!!!
小傅哥 | https://bugstack.cn 沉淀、分享、成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获。目前已完成的专题有;Netty4.x实战专题案例、用Java实现JVM、基于JavaAgent的全链路监控、手写RPC框架、架构设计专题案例、源码分析、算法学习等。一、前言写这篇文章的时候我在想可能大部分程序员包括你我,常常都在忙于业务开发或奔...原创 2020-03-26 09:23:00 · 2935 阅读 · 5 评论 -
ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称以及入参和出参结果并记录方法耗时
作者:小傅哥博客:bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!一、前言在我们实际的业务开发到上线的过程中,中间都会经过测试。那么怎么来保证测试质量呢?比如;提交了多少代码、提交了多少方法、有单元测试吗、影响了那些流程链路、有没有夹带上线。大部分时候这些问题的汇总都是人为的方式进行提供,以依赖相信研发为主。剩下的就需要依赖有经验的测试进行白盒验证。所以即使是这样...原创 2020-04-07 08:57:49 · 3502 阅读 · 15 评论 -
ASM字节码编程 | 用字节码增强技术给所有方法加上TryCatch捕获异常并输出
作者:小傅哥博客:https://bugstack.cn仓库:https://github.com/fuzhengwei/CodeGuide/wiki沉淀、分享、成长,让自己和他人都能有所收获一、前言你开发的系统是裸奔的吗?深夜被老板 Diss一套系统是否稳定运行,取决于它的运行健康度,而这包括;调用量、可用率、响应时长以及服务器性能等各项指标的一个综合值。并且在系统出现异常问...原创 2020-04-17 09:18:46 · 3454 阅读 · 13 评论