【发布时间】:2016-02-08 05:09:16
【问题描述】:
有没有一种方法可以在不编织或检测 rt.jar 的情况下获得对 String 类的构造函数的所有调用(直接或使用反射)的通知?
是否可以进一步过滤这些通知,仅针对特定包中的呼叫?
还有可能使这些通知异步(如事件),这样实际的 JVM 调用不会减慢
我的用例是拦截所有正在创建的字符串,对内容进行模式匹配,并根据某些规则(全部在后端)提出变更,作为某些平台组件的一部分。
由于我不想检测 rt.jar,因此 AspectJ 似乎没有问题(因为 LTW 无法在 java 核心类上完成)。 JVM TI 似乎有潜在的工具,但我不确定如何实现它。
谢谢, 哈里什
【问题讨论】:
-
为什么不用仪器?它完全适合您想要的东西。
RetransformClassesAPI 可以做拦截技巧。是的,它也适用于核心类。 -
我知道你不想这样做,但是通过 AspectJ 二进制编织检测 rt.jar 并不是火箭科学。我做过一次只是为了好玩。
-
@apangin 将尝试 RetransformClasses。正在考虑是否有异步获取事件的方式,以便在对象分配期间不影响主代码执行。