如何使用 Groovy 拦截 Java 应用程序中所有方法的执行?

2024-04-16

是否可以拦截应用程序中调用的所有方法?我想和他们一起做一些事情,然后让他们执行。我试图覆盖这种行为Object.metaClass.invokeMethod,但似乎不起作用。

这可行吗?


你看过吗Groovy AOP http://github.com/chanwit/groovy-aop/tree/master?数量很少文档 http://github.com/chanwit/groovy-aop/blob/77f3a17a99d22566ffbcd78e742441b53b5be9e5/userguide/01-Introduction.textile,但它允许您以与 AspectJ 概念上类似的方式定义切入点和建议。看看单元测试 http://github.com/chanwit/groovy-aop/tree/77f3a17a99d22566ffbcd78e742441b53b5be9e5/src/test/groovy/org/codehaus/groovy/aop/tests更多例子

下面的示例将匹配对所有编织类型的所有调用,并在继续之前应用建议:

// aspect MyAspect
class MyAspect {
  static aspect = {
    //match all calls to all calls to all types in all packages
    def pc = pcall("*.*.*")

    //apply around advice to the matched calls
    around(pc) { ctx ->
      println ctx.args[0]
      println ctx.args.length
      return proceed(ctx.args)
    }
  }
}
// class T
class T {
  def test() {
    println "hello"
  }
}
// Script starts here
weave MyAspect.class
new T().test()
unweave MyAspect.class
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Groovy 拦截 Java 应用程序中所有方法的执行? 的相关文章

  • AspectJ 加载时间编织不适用于 Spring beans

    我正在开发一个项目 该项目使用 Spring 配置的 Java 而不是 xml 风格来连接依赖项 它还具有分析逻辑 应通过 AspectJ 将其编织到所需的方法上 通过注释 设置正在运行 我可以看到我想要的包中的类正在编织 并且分析信息已从
  • 如何在 Groovy 中执行引用等于?

    Groovy 将 映射到 eq uals 通常很方便 但是当我想按同一性进行比较时该怎么办 例如 GPathResult通过调用text 来实现equals 对于大多数内部节点来说它是空的 我正在尝试识别根节点 但通过该实现这是不可能的 如
  • 编译时检查函数是否使用/未使用 C++

    我想在编译时检查是否有某些函数某堂课使用 未使用 相应地使编译过程失败 通过 例如如果函数F1在代码中的某处调用我希望编译成功 并且 if 函数F2称为我希望它失败 关于如何使用预处理器 模板或任何其他 C 元编程技术来做到这一点 有什么想
  • groovy 中具有默认值的命名参数

    是否可以在 groovy 中使用具有默认值的命名参数 我的计划是创建一种对象工厂 可以在没有任何参数的情况下调用它 以获得具有默认值的对象 另外 我需要显式设置对象的任何参数的功能 例如 我相信这可以通过 Python 关键字参数实现 我现
  • C++运行时如何确定抛出的异常的类型?

    如果我执行以下操作 运行时如何确定抛出的异常的类型 它使用 RTTI 吗 try dostuff throws something catch int e catch const char e catch const myexception
  • Groovy 错误地使用了封闭类的构造函数?

    Given static class Question stuff List
  • 从属性文件加载属性并使其在整个作业/管道中可用 - Jenkins 声明性语法

    我的要求很简单 我只是想外部化一些 值 以使我的 Jenkinsfile 更可重用 为此我需要从 Jenkinsfile 旁边的文件加载属性 并确保这些属性是可以在管道中的任何地方使用 我对 Groovy 和 Jenkins 代码仍然很陌生
  • GPars 报告大量异步函数的状态并等待完成

    我有一个解析器 在收集一行数据后 我想触发一个 aync 函数并让它处理该行 同时主线程继续运行并获取下一行 我看过这个帖子 在 Groovy 中如何同时执行两个任务并等待结果 https stackoverflow com questio
  • Groovy 有“use strict”吗?

    我记得从我的 Perl 时代起 使用严格 http perldoc perl org strict html 导致运行时执行额外验证的语句 Groovy 是否有等效的语句 我不喜欢在运行时被编译时检测到的东西所困扰 比如向构造函数传递的参数
  • 得到 java.lang.NoClassDefFoundError: groovy/lang/GroovyObject

    在命令 shell 中执行 java 类时出现以下异常 Exception in thread main java lang NoClassDefFoundError groovy lang GroovyObj ect at java la
  • 如果变量的值在编译时已知/未知,则进行专门化

    如何在编译时 在实际编译和运行程序之前 其参数之一的值已知 未知的情况下专门化模板函数 我还不知道怎么办 idea 1 include
  • Ruby 元编程,RSpec 的“应该”如何工作?

    我正在阅读 RSpec 并试图弄清楚 RSpec 的 应该 是如何实现的 有人可以帮忙解释一下这个函数的元性质是如何工作的吗 代码位于此处 http github com dchelimsky rspec blob master lib s
  • 不支持动态值作为注释中的属性 - AspectJ Android [AOP Android]

    我正在使用自定义注释来记录用户单击的 id 但我收到一个错误 属性值必须是常量 我的代码片段如下 mAssetId Asset getContentId TrackEvent track event ArrayParams Params k
  • 如何在 Groovy 中的 JSON Converter 方法中保留字母大小写?

    我正在尝试将 groovy 对象解析为 JSON 属性名称不遵循正确的驼峰式大小写形式 class Client String Name Date Birthdate 当我使用这个时 Client client new Client Nam
  • 有人有 Postsharp 制作经验吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • F# 类型提供程序与 Lisp 宏

    我一直在阅读有关 F 3 0 类型提供程序的内容 例如here http msdn microsoft com en us library hh156509 aspx 并且它们似乎基于一种编译时代码生成 在这方面我想知道它们与 Lisp 宏
  • 结构体tag和name,为什么声明为name的局部变量会编译?

    在我最近看到的一些代码中 有一个如下定义的结构 typedef struct tagMyStruct int numberOne int numberTwo MYSTRUCT 按照我的理解 tagMyStruct是新的数据类型并且MYSTR
  • 在单独的模块中使用 Spring AOP 方面

    我在一个 Maven 项目模块中有一个方面 com x NiceAspect 在一个单独的 Maven 模块中有一个类 com x NiceClass 这些模块具有相同的 POM 父级 共同创建一个项目 我想要实现的目标是拥有一个通用的方面
  • 如何将任务添加到 gradle 中的主要“构建”任务

    当我尝试使用以下代码将任务添加到主构建任务时 rootProject tasks getByName build dependsOn mytask 当我跑步时它抱怨gradle w build输出 Where Build file line
  • Jenkins 管道和 java.nio.file.* 方法的问题

    我正在尝试使用 java nio file 中的方法在 Jenkins 管道中执行一些基本文件操作 无论代码存在于哪个节点块中 代码都在主节点上执行 在管道中 我已经验证了各个节点块都是正确的 它们唯一地标识了特定的节点 但是 pathEx

随机推荐

  • 更改表的列名后,所有单元和功能测试均出错

    我重命名了表的 3 列 突然我的所有单元和功能测试都抛出了相同的错误 即它们找不到具有旧列名称的表 即使对与我修改的表无关的模型的测试也会抛出相同的错误 Example 54 Error test should show user User
  • 即时编译与提前编译相比有何优点?

    我最近一直在思考这个问题 在我看来 最大的优势是JIT编译或多或少应该归因于中间格式 而抖动本身并不是生成代码的好方法 那么主要就是这些pro JIT我经常听到的编译参数 即时编译可实现更大的可移植性 这不是中间格式的原因吗 我的意思是 一
  • 使用 CSS/jQuery 的响应式字体大小

    我想在 div 内创建响应文本 I tried jquery 文本填充 https github com jquery textfill jquery textfill and FlowType http simplefocus com f
  • 有没有办法检测手机和手持设备上的3G和2G连接速度?

    有没有办法检测手机和手持设备上的 3G 和 2G 连接 就像如果我想在用户使用 3G 时提供高端网站 如果用户使用 2G 则提供高度优化的版本 在 Android 2 2 中 有一个 JS 对象可以实现这一点 您可以根据连接类型编写一个供
  • 如何在 PHP 中将字符串的第一个字符变为小写?

    我无法使用斯特洛尔 https www php net manual en function strtoupper php因为它会影响所有角色 我应该使用某种正则表达式吗 我收到一个字符串 它是产品代码 我想在不同的地方使用此产品代码作为搜
  • 寻找最接近的斐波那契数列

    我正在尝试解决一个更大的问题 并且我认为该程序的重 要部分花费在低效的计算上 我需要计算给定数字 N 的区间 P Q 其中 P 是 到 N 的最小斐波那契数 目前 我正在使用地图来记录斐波那契数的值 查询通常涉及搜索最多 N 的所有斐波那契
  • 使用按钮更新 Matplotlib 中的注释

    我正在修改 Matplotlib 文档中的按钮示例 以在图中添加文本注释 我的问题是 我无法找到每次按下按钮时更新注释的正确方法 因为注释重叠 我尝试了remove 方法 但不起作用 import numpy as np import ma
  • 使用 Core Reporting Google API v4 (Java) 显示超过 10000 行

    我正在使用以下方式获取 Google Analytics 数据核心报告 API v4 https developers google com analytics devguides reporting core v4 对于给定的维度和指标组
  • 数据访问库返回数据集或对象

    在使用调用存储过程的库时是否存在普遍共识 返回数据集或使用 sqldatareader 填充自定义对象 数据传输对象的序列化成本是否低于数据集 就我个人而言 我将 SqlDataAdapter 与 DataTables 一起使用 数据表有W
  • 如何原子地否定 std::atomic_bool?

    朴素的布尔否定 std atomic bool b b b 似乎不是原子的 我怀疑这是因为operator 触发转换为普通bool 如何原子地执行等效的否定 下面的代码说明了朴素的否定不是原子的 include
  • openh264 - bEnableFrameSkip=0,比特率无法控制

    关于 opencv H 264 有很多问题 但是 他们都没有给出详细的解释 我在 Visual Studio 中使用 openh264 openh264 1 4 0 win32msvc dll 以及 opencv 3 1 使用启用 ffmp
  • Shiny:如何检测选择了哪些手风琴元素?

    我有一个 R Shiny 在那里server R输出大量动态生成的UI对象 而不是处理数百个对象input来处理 我想我可以使用bs accordion https ijlyttle github io bsplus articles ov
  • 如何使用 kotlin 通过 TCP 连接发送和接收字符串

    我在 Windows 上有一个 TCP 服务器 我想在服务器和我的 Android 设备之间发送和接收文本字符串 我花了很多时间搜索使用 Kotlin 的示例 但没有找到任何有用的代码 所以我现在只能创建套接字并连接 fun connect
  • 使用 LINQ to XML 将 HTML 标记保留在 XML 中

    我有一个 xml 文件 我使用 LINQ to XML 从中提取 html 这是该文件的示例
  • 将 char* 传递给需要 unsigned char* 的方法

    我正在开发一些带有 SDK 的嵌入式设备 它有一个类似的方法 MessageBox u8 u8 u8 is typedefed unsigned char when I checked 但我在他们的示例中看到调用如下代码 MessageBo
  • 将数据库(.mdf 文件)附加到 SQL Server 时出错

    我在附加数据库时遇到问题DBName mdf到网络 SQL Server 管理员可以手动附加数据库 但如果我尝试 我会收到以下错误消息 数据库 DBName 无法升级 因为它是只读的 具有只读文件或用户无权修改某些文件 使数据库或文件可写
  • 防止直接访问 PHP 页面

    如何防止我的用户直接访问仅用于 ajax 调用的页面 在 ajax 调用期间传递密钥似乎是一种解决方案 而没有密钥的访问将不会被处理 但制造钥匙也很容易 不是吗 查看源代码的诅咒 p s 使用 Apache 作为网络服务器 编辑 为了回答为
  • Qt4.5:在 app.exec 之前使用基于事件循环的 localsocket

    我遇到了 Qt 的实际问题 我正在使用一个与 QLocalSocket 与另一个进程 管道 unix 套接字 通信的类 并且我需要在其他事件发生之前进行通信 即在 app exec 启动之前 或更准确地说 应用程序启动后立即进行 我正在使用
  • 添加 CarPlay 用户界面

    我正在开发我当前的 iPhone 音频应用程序 以支持 CarPlay 我已经获得Apple的批准并获得了开发权利 并观看了视频 Enabling Your App for CarPlay https developer apple com
  • 如何使用 Groovy 拦截 Java 应用程序中所有方法的执行?

    是否可以拦截应用程序中调用的所有方法 我想和他们一起做一些事情 然后让他们执行 我试图覆盖这种行为Object metaClass invokeMethod 但似乎不起作用 这可行吗 你看过吗Groovy AOP http github c