grails 中的通用方法拦截(特别是控制器)

2023-12-28

我正在尝试在 grails 中创建一个通用函数,它允许我指定类和函数名称,并根据该条件拦截任何函数调用:

getSomeClass().metaClass.invokeMethod = { String methodName, args ->
    MetaMethod someAction =  getSomeClass().metaClass.getMetaMethod(methodName, args)
    def result = someAction.invoke(delegate, args)
    if (methodName==getSomeMethodName())
        intercept(args, result)
    return result
}

这适用于 POGO 和域类,但似乎不适用于控制器类。虽然我完全知道 Grails 中有可用的控制器拦截器和过滤器,但这些并没有真正集中我想要实现的目标,并且试图为某些集中行为创建一个简单的通用函数

任何关于为什么这在控制器上不起作用的指导将不胜感激,谢谢


您的方法适用于通过 Groovy 元类机制进行的方法调用,但在 Grails 2 中,这不适用于控制器操作 - 它们是使用普通的 Java 反射来调用的(java.lang.reflect.Method.invoke),因此您的自定义invokeMethod被绕过。

如果您想要一个既适用于来自 Java 又适用于来自 Groovy 的调用的 AOP 机制,您可能必须使用诸如 AspectJ 加载时编织之类的东西。 Spring 的基于代理的 AOP 可能可以工作,但是 Grails 2 控制器系统依赖于具有特定的操作方法。@Action注解(在编译时通过 AST 转换添加),我不知道 Spring AOP 代理是否在生成的代理方法上保留目标类的方法注解。

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

grails 中的通用方法拦截(特别是控制器) 的相关文章

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

    我的要求很简单 我只是想外部化一些 值 以使我的 Jenkinsfile 更可重用 为此我需要从 Jenkinsfile 旁边的文件加载属性 并确保这些属性是可以在管道中的任何地方使用 我对 Groovy 和 Jenkins 代码仍然很陌生
  • 如何从命令行运行 spock 测试?

    我已经检查过这个链接 https gist github com ysb33r 5825457 https gist github com ysb33r 5825457 似乎可以这样运行 groovyc groovy java cp gra
  • Groovy 中的嵌套“each”循环

    需要有关 groovy 中嵌套循环语法的指导 如何使用迭代器在这里打印 a name的值 b name的值 的值 List a a each print it name List b something b each print value
  • 我应该在 grails 应用程序中的哪里放置瞬态域类?

    我应该在 grails 应用程序中的哪里放置瞬态域类 即我有一个Action将被传递和使用但从未保存的类 这应该是在grails app domain文件夹 还是其他地方 grails app domain用于持久域类 但并非所有应用程序的
  • Groovy 有“use strict”吗?

    我记得从我的 Perl 时代起 使用严格 http perldoc perl org strict html 导致运行时执行额外验证的语句 Groovy 是否有等效的语句 我不喜欢在运行时被编译时检测到的东西所困扰 比如向构造函数传递的参数
  • Grails 2.3 IntegrationSpec 不能为事务性 false

    我最近升级到 Grails 2 3 并尝试将所有旧测试迁移到 spock 集成测试 但它在清理时失败了 因为我的测试是非事务性的 Grails 文档说测试可以是非事务性的 但我们需要手动处理它 但在这里似乎不太正确 因为我在扩展 Integ
  • groovy 无法解析 kotlin 类

    由于我无法解决我遇到的问题kotlin 我决定回到groovy为了实现该插件 但是我遇到了这个问题 我有这样的项目结构 为了不重写所有类 我决定重用中实现的类kotlin 然而我的课FileProcessingCoreGroovy Down
  • Chrome 和 JSESSIONID

    chrome 出现以下问题 我已经在服务器上运行 Grails 1 3 7 应用程序 我注意到 当我从 Chrome 请求静态内容 例如非动态 html 文件 时 Chrome 会创建两个 JSESSIONID Cookie 第一个是登录窗
  • Grails 操作被调用两次。帮助!

    我正在编写一个 grails 应用程序并遇到一个奇怪的问题 单击页面上的提交按钮时 关联的操作会快速连续调用两次 这会导致一切都严重破坏 以前有其他人见过这个问题吗 下面是我的代码 从普惠制页面
  • Grails:如何查询多对多映射中的对象?

    您好 我有以下域类 class Student int age static hasMany courses Course class Course String name static hasMany students Student 我
  • Jenkins 管道中的动态变量与 Groovy 方法变量

    我在 Groovy 中有一个用于声明性管道的 Jenkinsfile 以及两个创建的 Jenkins 变量 其名称为 OCP TOKEN VALUE ONE 和 OCP TOKEN VALUE TWO 以及相应的值 当我尝试传递方法变量并在
  • 如何将任务添加到 gradle 中的主要“构建”任务

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

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

    我在部署 Grails 应用程序时遇到问题 一切都在本地测试环境中运行 ERROR localhost startStop 1 错误 context GrailsContextLoader 错误 初始化应用程序 使用名称创建 bean 时出
  • Grails Asset-pipeline 不加载角度部分模板

    我将 angular ui bootstrap 与 Grails 2 3 x asset pipeline 1 6 1 插件一起使用 其中一个组件 alert js 正在尝试加载 template alert alert html 但这会解
  • Grails - 如何对 addTo* 进行单元测试

    是否可以在 Grails 中对 addTo 函数进行单元测试 感谢您的帮助 文档第 9 1 节中说 http grails org doc latest guide 9 20Testing html 9 1 20Unit 20Testing
  • Groovy - 在对象实例化期间忽略映射中的额外属性

    有没有办法让 groovy 在对象实例化期间忽略映射中的额外属性 例子 class Banana String name def params name someGuy age 13 new Banana params 在这个例子中 gro
  • 与赋值“=”和括号 { } 的使用混淆

    我是 gradle 的新手 对于 groovy 也是如此 我几乎不了解某些概念 并且真的不知道它是否与 groovy 或 gradle 相关 以及需要 google 哪些关键字来获取帮助 我经常被这样的事情绊倒 android some c
  • Spark/Gradle -- 在 build.gradle 中获取 IP 地址以用于启动 master 和worker

    我在基本层面上了解 build gradle 构建脚本的各个移动部分 但无法将它们全部结合在一起 在 Apache Spark 独立模式下 只需尝试从 build gradle 在同一个机器上启动 master 和worker 稍后将使用
  • Groovy - JsonSlurper 解析 JSON 文件

    我有一个类似于下面的 JSON 文档 我正在尝试在 Groovy 中解析它 基本上对于每所学校 学校信息 我想抓住SCHOOL COUNTRY和其他领域 我正在尝试下面的代码 但它没有返回我需要的内容 对于列出的每所学校 1 000 所 我

随机推荐