- 博客(885)
- 收藏
- 关注
原创 字节码操作工具——ByteBuddy应用(1)创建一个类并定义方法
用法类型是否需要重启说明否推荐方式,动态生效。因为此时类尚未加载或通过实现重新加载redefine 未加载类否使用redefine 已加载类条件生效需支持静态创建类是属于新类,需手动调用。
2025-07-24 10:17:59
121
原创 字节码操作工具——ByteBuddy介绍
ByteBuddy 是一个基于 Java 的 字节码操作库,用于在 运行时或构建时创建/修改 Java 类。它通过链式 API(Fluent API)封装了底层的 ASM 操作,使字节码操作更简单、直观、强大。简而言之:ByteBuddy = 操作字节码,但不必写字节码。
2025-07-24 10:02:03
122
原创 字节码操作工具——概述
通过前面的几个demo,我们知道java agent只提供了一个机制,本身只能拦截类加载,只有结合字节码操作才能发挥作用。
2025-07-24 09:42:35
304
原创 字节码操作工具——为什么需要字节码工具(以打印方法调用日志为例)
看下控制台日志打印:可以看到,[my agent class]打印了调用的类名。为什么没有打印拦截器名称?如我已有一个现成的maven工程security-jwt0demo,现修改VM启动命令加载我的agent包,上面打印的日志太多了,把java自带的也打印出来了,这里加个过滤只打印主项目代码的className。Java Agent 的核心功能是通过。之后启动主项目,打印了很多的日志。
2025-07-23 11:30:39
169
原创 java agent注入方法——静态 Instrumentation和动态Instrumentation
在 Java Agent 的使用中,和是两种注入方式。
2025-07-23 10:21:26
388
原创 java agent原理
一、原理借助java.lang.instrument,开发者可以构建一个独立于应用程序的代理(Agent),用来监测和协助运行在JVM上的程序,甚至能够动态的修改和替换某些类的定义。这样的特性实际上提供了一种虚拟机级别的AOP实现。而java.lang.instrument包是基于JVMTI机制实现的:JVMTI(Java virtual machine tool interface)是一套由java虚拟机提供的一套代理程序机制,可以支持第三方工具程序以代理的方式连接和访问JVM。
2025-07-23 09:38:25
660
原创 java agent介绍&常见应用
对于已加载的类,需要调用retransformClass函数,然后经由redefineClasses函数,在读取已加载的字节码文件后,若该字节码文件对应的类关注了ClassFileLoadHook事件,则调用ClassFileLoadHook事件。后续流程与类加载时字节码替换一致。通过以上描述可以看出在字节码文件加载的时候,会触发ClassFileLoadHook事件,该事件调用TransFormClassFile,通过经由instrument的addTransformer注册的方法完成整体的字节码修改。
2025-07-22 15:32:17
780
原创 Mysql 8新特性
是 MySQL 8.0 中用于语句的一个子句,用来控制表结构变更时的算法行为,表示“即时”变更,不需要重建整个表,也不需要复制数据。是目前最快的表结构变更方式,执行速度极快。✅ 优点:极快,无需锁表,适合在线DDL❌ 限制:仅支持部分简单的变更操作🔍 建议:尽可能使用INSTANT,但加上IF EXISTS来安全处理。
2025-07-22 09:23:35
172
原创 spring cache(四)新老数据双删问题
但是如果有getByName(String name)的查询,cache key xxx:userName,并且userName可以被修改,那么对于updateByName(UserDTO userDTO),不仅要删除newName对应的newEntity的所有cache key,还要删除oldName对应的oldEntity对应的所有cache key。
2025-07-17 10:42:47
151
原创 spring datasource的一些连接参数
autoReconnect=true&useAffectedRows=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=true&rewriteBatchedStatements=true&jdbcCompliantTruncation=false
2025-07-01 15:08:15
146
原创 sql_mode(二)宽松模式和严格模式的区别
case严格模式宽松模式单插 NULL 到NOT NULL列(该列无默认值)报错报错单插NOT NULL列(该列无默认值),不指定列报错报错单插 NULL 到NOT NULL列(该列有default值)报错报错单插NOT NULL列(该列有默认值),不指定列成功,使用默认值成功,使用默认值批量插入 NULL 到NOT NULL列(该列无默认值)报错成功,转成空字符串批量插 NULL 到NOT NULL列(该列有default值)报错成功,转成空字符串。
2025-06-18 16:59:13
389
原创 har文件如何打开
har文件(HTTP Archive)是一种用于记录 Web 浏览器与网站之间所有请求和响应的文件,通常用于调试网络问题,格式为 JSON。你可以用以下几种方式打开.har。
2025-06-11 09:39:15
589
原创 sql_mode(一)介绍
sql_mode是 MySQL 用于控制 SQL 语法行为和数据校验规则的一个系统变量。它会影响:插入非法或不完整数据时是否报错GROUP BY的严格性日期和时间的处理方式是否允许NULL自动转换为0等。
2025-06-06 10:56:43
445
原创 spring event事件(四)内部事件(1)ApplicationReadyEvent
是 Spring Boot 提供的一个事件,它表示:整个 Spring 应用上下文已完全启动,Spring Boot 应用已准备好接受请求。
2025-05-20 16:57:05
308
原创 SpringBean模块(三)具有生命周期管理能力的类(1)AutowireCapableBeanFactory
【代码】SpringBean模块(三)生命周期管理能力相关的类(1)AutowireCapableBeanFactory。
2025-05-20 16:44:22
157
原创 spring/springboot SPI
是 **Spring Boot 自动装配机制(SPI 扩展)**的核心配置文件,用于注册一些在 Spring Boot 启动过程中被自动加载的类。
2025-04-22 14:35:53
428
原创 springboot启动流程
7. 创建 ApplicationContext(如 AnnotationConfigApplicationContext)8. 调用 ApplicationContextInitializer(可以修改 context)|—— EnvironmentPostProcessor 调用(修改配置)11. 执行 BeanPostProcessor(Bean 级生命周期钩子)6. 加载 application.properties/yml。1. JVM 启动 -> main() 方法执行。
2025-04-22 13:55:15
158
原创 aws服务(四)文件存储服务S3 介绍&使用&代码集成
Amazon S3是 Amazon Web Services 提供的一种对象存储服务(Object Storage),用于在云中存储和检索任意数量的数据。它以高可用性、高扩展性和高持久性著称,非常适合用来存储网站资源、数据备份、日志文件、大数据、机器学习输入输出等。
2025-04-21 14:50:25
541
原创 IntelliJ配置相关类库(二)LineMarkerProvider
是 IntelliJ 平台插件开发中的一个接口,它的作用是在编辑器左侧的“行标记区域”(就是代码行号左边那一栏)添加各种图标、标记或导航链接。比如Java 类中看到的:小绿色三角形(可以点击运行 main 方法)方法重写的箭头图标(点击能跳到父类方法)自定义的注解标识各种插件加的导航小图标这些都是通过或其变种(如)来实现的。
2025-04-14 14:48:08
505
原创 intellij入门(二)如何创建
选择 File | New | Project,或者选择Project Structure--Modules--New Module 创建一个新工程,然后在 IntelliJ IDEA 中打开这个项目,它已经包含了所有必要的依赖和配置。默认情况下,IntelliJ IDEA 会为 Kotlin 项目创建。注意,如果你在创建 IntelliJ IDEA 插件项目时只看到。中,添加 IntelliJ Platform 插件依赖,然后。目录,这是因为在创建项目时选择了。(项目存放路径): 选择合适的位置。
2025-04-02 16:02:44
885
原创 SpringBean模块(一)定义&如何创建&生命周期
在 Spring 框架中,Bean是指由Spring 容器管理的Java 对象。Spring 负责创建、配置和管理这些对象,并在应用程序运行时对它们进行依赖注入(Dependency Injection,DI)。通俗地讲,Spring Bean 就是 Spring 容器中的一个组件,它可以是一个普通的 Java 类,但被 Spring 管理起来后,就称为 "Bean"。2、核心特点由 Spring 容器管理Bean 的生命周期由 Spring 负责,不需要手动创建和销毁。
2025-03-28 13:37:50
674
原创 SpringBean模块(二)bean初始化(2)和容器初始化顺序的比较--引入ApplicationContextInitializer
前面介绍了获取容器可以借助ApplicationContextAware的setApplicationContext方法,初始化接口可以借助一些注解也可以借助bean的初始化方法,那么他们的执行顺序是什么样的呢?
2025-03-28 10:05:40
188
原创 Springbean(二)@Component及其派生注解自动注入(2)使用注意和加载问题
一、class使用,abstratc class和interface不使用。
2025-03-27 14:47:46
386
原创 IntelliJ 配置文件(1)plugin.xml
在 IntelliJ IDEA 插件开发中,plugin.xml是插件的配置文件,它包含了关于插件的所有基本信息、扩展点、依赖关系等。该文件使用 XML 格式进行定义。以下是plugin.xml。
2025-03-18 14:26:31
449
原创 IntelliJ 配置相关类库(一)Action
在 IntelliJ IDEA 插件开发中,Action是一个重要的概念,它定义了用户可以在 IDE 中执行的操作,如菜单项、工具栏按钮、快捷键等。配置Action需要在插件的plugin.xml文件中进行配置,并且通常会涉及到在代码中定义相应的 Action 类。Action是实现插件功能的类, 一个Action类需要继承AnAction并且实现actionPerformed方法。
2025-03-18 13:53:16
535
原创 intellij入门(三)项目结构&调试
在 IntelliJ IDEA 插件开发中,Action是一个重要的概念,它定义了用户可以在 IDE 中执行的操作,如菜单项、工具栏按钮、快捷键等。配置Action需要在插件的plugin.xml文件中进行配置,并且通常会涉及到在代码中定义相应的 Action 类。Action是实现插件功能的类, 一个Action类需要继承AnAction并且实现actionPerformed方法。
2025-03-17 16:04:04
975
原创 IntelliJ入门(一)环境准备
IntelliJ IDEA 简称 IDEA,是 Jetbrains 公司旗下的一款 JAVA 开发工具,支持 Java、Scala、Groovy 等语言的开发,同时具备支持目前主流的技术和框架,擅长于企业应用、移动应用和 Web 应用的开发,提供了丰富的功能,智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等。
2025-03-17 15:04:33
514
原创 idea插件安装方法
常见的idea插件:好用的idea插件 常用的idea 插件记录 idea 插件整理 idea plugin-CSDN博客JetBrains Marketplace
2025-03-10 10:26:23
664
原创 父子继承与转型
2、List<Settings>不可以自动转型为List<ISettings>,1、Settings可以自动转型为ISettings;ISettings为接口,Settings是实现类。是两个不同的类型,它们之间没有自动的转型关系。都是明确指定了其类型的。原因在于泛型类型在 Java 中是。(invariant)的,即使。之间并没有直接的父子关系。接口,但这并不会自动改变。是两个不同的类型,虽然。
2025-02-27 15:53:58
357
原创 org.apache.commons.beanutils.BeanUtilsBean
BeanUtils.populate(Object bean, Map properties) 方法实在org.apache.commons.beanutils.BeanUtils包下的一个一个方法。该方法的方法头此方法中,有两个参数,Object bean 为一个实体类,Map properties为一个map集合,调用此方法的执行过程为(1)遍历Map集合中的key(2)判断bean实体中是否有相应的属性(3)如果有与bean中对应的属性。
2025-02-26 10:51:24
219
原创 mysql监控--慢查询
如果慢查询日志文件变得过大,可以通过日志轮转(log rotation)将旧的日志文件存档并创建新的日志文件。),并且开启了慢查询日志,二者可能结合使用。虽然二进制日志主要用于记录数据库的更改操作,但在特定配置下,它可能也会记录与慢查询相关的某些信息。这是最主要的文件,记录了执行时间超过设置阈值的 SQL 查询。可以通过 MySQL 配置项启用慢查询日志,并指定日志文件的路径。这些文件通常包含慢查询的总体统计信息,例如查询类型分布、执行时间最长的查询等。文件是慢查询日志分析的汇总文件,通常由工具(如。
2025-02-14 09:59:23
471
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人