开发 IDEA Plugin 引入探针,基于字节码插桩获取执行SQL

本文介绍了如何通过开发IntelliJ IDEA插件,利用Javaagent和Byte-Buddy字节码框架,插入探针以捕获并打印执行的SQL语句,简化开发过程中SQL验证的步骤。详细讲解了插件开发过程,包括工程结构、字节码增强、探针入口和拦截方法,以及测试验证。
摘要由CSDN通过智能技术生成

一、前言

片面了!

一月三舟,托尔斯泰说:“多么伟大的作家,也不过就是在书写自己的片面而已”。何况是我们,何况是我们!

虽然我们不书写文章,但我们写需求、写代码、写注释,当我们遇到了需要讨论的问题点时,往往变成了争论点。这个好、那个差、你用的都是啥啥啥!

当你把路走窄了,你所能接受到的新的思路、新的想法、新的视野,以及非常重要的收入,也都会随之减少。只有横向对比、参考借鉴、查漏补缺,才能让你的头脑中会有更多的思路,无论是在写代码上、还是在理财上、还是在生活上。

二、需求目的

你是否有在使用 IntelliJ IDEA 做开发的过程,需要拿到执行 SQL 语句,复制出来做验证的时候,总是这样的语句: SELECT * FROM USER WHERE id = ? AND name = ? 又需要自己把 ? 号 替换成入参值呢?

当然这个需求其实并不大,甚至还可以使用其他方式解决。那么在本章节会给你提供一个新的思路,可能你几乎是没过的方式进行处理。

那么在这个章节的案例中我们用到的是基于 IDEA Plugin 开发能力,把字节码插入探针,基于 Javaagent 的能力,注入到代码中。再通过增强后的字节码,获取到 
com.mysql.jdbc.PreparedStatement -> executeInternal 执行任务的对象,从而拿到可以直接测试的 SQL 语句。

三、案例开发

1. 工程结构

guide-idea-plugin-probe
├── .gradle
├── probe-agent
│   ├── src
│   │   └── main
│   │       └── java
│   │       	└── cn.bugstack.guide.idea.plugin
│   │       		├── MonitorMethod.java
│   │       		└── PreAgent.java
│   └── build.gradle
└── probe-plugin
│   └── src
│   │   └── main
│   │       ├── java
│   │       │	└── cn.bugstack.guide.idea.plugin
│   │       │		└── utils
│   │       │		│	└── PluginUtil.java
│   │       │		└── PerRun.java
│   │       └── resources
│   │       	└── META-INF
│   │        		└── plugin.xml
│	└── build.gradle
├── build.gradle    
└── gradle.properties

源码获取:#公众号: bugstack虫洞栈 回复: idea 即可下载全部 IDEA 插件开发源码

在此 IDEA 插件工程中,工程结构分为2块:

java.programPatcher

2. 字节码增强获取 SQL

此处的字节码增强方式,采用的是 Byte-Buddy 字节码框架,它的使用方式更加简单,在使用的过程中有些像使用 AOP 的拦截方式一样,获取到你需要的信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值