Java字节码注入

2024-01-03

我正在尝试理解这个概念。我的问题是:

  1. 从性能角度来看,此操作的成本是否昂贵?如果是,为什么?
  2. 如果我试图通过在调用方法后注入一些代码来拦截传递给该方法的某些参数,那么这种注入是发生一次还是每次调用该方法时都会发生?
  3. 该注入代码驻留在哪里?在应用程序源本身还是其他地方?

您可以使用 Java 代理来实现字节码注入。

java Agent 是一个库,它拦截类加载器处加载的字节码,并在加载到 JVM 之前对其进行增强。当然,这样的库通常依赖于字节码操作库,例如 Javassist、ASM 或 CGLib。 因此,字节码操作仅在类加载时完成一次。

请参阅官方Javadoc:http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html

这篇文章解释了如何做你想做的事:http://today.java.net/pub/a/today/2008/04/24/add-logging-at-class-load-time-with-instrumentation.html http://today.java.net/pub/a/today/2008/04/24/add-logging-at-class-load-time-with-instrumentation.html

另外,如果您真的对字节码基础知识感兴趣,JRebel 开发人员之一的这篇文章应该会让您满意:http://arhipov.blogspot.com/2011/01/java-bytecode-fundamentals.html http://arhipov.blogspot.com/2011/01/java-bytecode-fundamentals.html

最后,你可以看一下Seren,一个我刚刚开始写的库。它是一个增强可序列化类的 Java 代理。这只是开始,但它确实有效。https://github.com/oliviercroisier/seren https://github.com/oliviercroisier/seren

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java字节码注入 的相关文章

随机推荐

  • 发布到数据:url — 有任何用例吗?

    在当前的 HTML5 规范中 可以POST具有数据方案的动作的表单 http www w3 org TR 2011 WD html5 20110525 association of controls and forms html form
  • Android解析json数据并添加搜索功能

    抱歉我的英语不好 我是 android 新手 我将 json 数据解析到 listview 中 现在我想给他添加一个搜索功能 但我有一个问题 当我在 edittext 中输入单词时 然后在 listview 中输入我的项目是重复的 并且项目
  • R 一元运算符重载:风险?

    在我不断寻求避免在一些简单命令中使用括号的过程中 我编写了以下运算符来创建新的图形窗口 我的问题是 除了明显无法在变量 newdev 上执行 not 函数之外 我是否面临 破坏 R 中任何内容的风险 function to overload
  • BASH:根据公共字段名称连接 2 个 CSV 文件

    我有 2 个 CSV 文件 我需要使用 BASH 连接它们 file 1 csv columns track id title song id release artist id artist mbid artist name durati
  • 从 OpenJDK Windows 创建 jre

    我们正在从 Oracle JDK JRE 切换到 OpenJDK 现在我只找到了 JDK 但我还想从 OpenJDK 获得 JRE 这是为了在客户端上安装我们的应用程序 而不需要完整的 JDK 有没有办法从 OpenJDK for Wind
  • git 过滤器分支到 git 过滤器存储库转换

    我按照此命令对 git 存储库中的所有提交执行更漂亮的操作 git filter branch tree filter prettier write js echo Error formatting possibly invalid JS
  • Python:在祖父母目录中导入文件

    等级制度 scripts web script1 py tests script2 py common utils py 我如何在 script1 和 script2 中导入 utils 并且仍然能够单独运行这些脚本 即 python sc
  • 使用 JPA 解析简单查询时出现语法错误

    我使用 netbeans 向导创建了实体 bean 并尝试从数据库获取数据 无论我使用什么 SQL 查询 它都不起作用 我尝试使用由向导创建的命名查询 NamedQuery name Usr findAll query SELECT u F
  • 导入不带行分隔符的固定宽度数据文件

    我有没有行分隔符的固定宽度数据文件 dbf 该数据文件的两行如下所示 20141101 77h 3 210 0 3 20141102 76h 3 090 0 3 一条线的宽度是c 8 4 7 41 对于日期 8 一些时间度量 4 数据点 7
  • 如何用C从字符串中删除前三个字符?

    如何用 C 删除字符串的前三个字母 指针加 3 char foo abcdef foo 3 printf s foo 将打印 def
  • 在应用程序中获取码头领域凭据

    这可能是一个愚蠢的问题 但我们在我们的服务器上使用码头基本身份验证 现在我们想在我们的应用程序中使用用户凭据 是否可以获取 RAP Web 应用程序中的当前登录信息 Thanks 我不是 RAP 专家 但看起来你想这样做 HttpServl
  • 如何在AChartEngine中设置CombinedXYChart的日期格式?

    我可以像这样设置时间表中的日期格式 final GraphicalView view ChartFactory getTimeChartView context dataset mRenderer dd MMM yyyy 但我不能在 Com
  • Spring服务默认作用域

    这是 a 的默认范围Spring 4 Service 设计一个有意义吗 Service实现存储有关当前登录用户的信息 根据当前HTTP会话 通过类属性 也可以通过使用final修饰符 Spring 4 Service 的默认范围是哪个 默认
  • C++11的long long真的至少是64位吗?

    It says 在维基百科上 en wikipedia org wiki C 11 Type long long int and 在 Stroustrup 的常见问题解答中 www stroustrup com C 11FAQ html l
  • Git 并在多个分支上工作

    我有几个 Git 分支 experimental something 和 master 我切换到 实验 分支 我注意到一个与 实验 无关的错误 属于 某事 中所做的更改 我应该如何修复它 我想我应该切换到 某事 修复错误 提交 然后回到 实
  • 显示磁盘大小和可用空间(以 GB 为单位)

    是否有一行代码可以以 GB 而不是 mb 为单位显示逻辑磁盘的可用大小和磁盘空间 我尝试做一些研究 但找不到一个衬垫 我确实尝试过将其除以 1GB 但这不起作用 我该如何实现这一点 gwmi win32 logicaldisk Format
  • 检查 Python FTP 连接

    我有一个 FTP 连接 可以从中下载许多文件并在其间进行处理 我希望能够检查我的 FTP 连接在这期间没有超时 所以代码看起来像这样 conn FTP host blah conn connect for item in list of i
  • 如果验证失败如何停止表单提交[重复]

    这个问题在这里已经有答案了 更新 我的问题更多是关于How to prevent the form submit if the validation fails 该链接不能解决我的问题 只是重申我正在做的事情 我有一个带有一堆输入字段的表单
  • Android L 中应用程序内容位于导航栏后面

    正如你所看到的 我的 知道了 按钮位于导航栏后面 无法修复它 我努力了
  • Java字节码注入

    我正在尝试理解这个概念 我的问题是 从性能角度来看 此操作的成本是否昂贵 如果是 为什么 如果我试图通过在调用方法后注入一些代码来拦截传递给该方法的某些参数 那么这种注入是发生一次还是每次调用该方法时都会发生 该注入代码驻留在哪里 在应用程