带有 Grails 的 AOP

2024-05-01

我想在我的 Grails 项目中创建自定义日志记录注释。

My code:

class MyService{
    @AuditLog
    def method1() {
        println "method1 called"
        method2()
    }
    @AuditLog
    def method2() {
        println "method2 called"
    }
}

拦截器:

class AuditLogInterceptor implements MethodInterceptor {
    @Override
    Object invoke(MethodInvocation methodInvocation) throws Throwable {
        println "${methodInvocation.method}"
        return methodInvocation.proceed();
    }
}

弹簧配置:

aop {
    config("proxy-target-class": true) {
        pointcut(id: "auditLogInterceptorPointcut", expression: "@annotation(xxx.log.AuditLog)")
        advisor('pointcut-ref': "auditLogInterceptorPointcut", 'advice-ref': "auditLogInterceptor")
    }
}

auditLogInterceptor(AuditLogInterceptor) {}

结果:

public java.lang.Object xxx.MyService.method1()
method1 called
method2 called

我也希望看到方法 2 的注释被触发。我缺少什么?


发生这种情况是因为服务类中对 self 的内部方法调用是not在代理实例上完成service班级。如果您从应用程序上下文中获取服务 bean 并尝试调用method2()你应该看到aspect听着advice.

class MyService{
    static transactional = false
    def grailsApplication

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

带有 Grails 的 AOP 的相关文章

  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • 如何设置带有子域和反向代理且不使用启用站点的 nginxconf?

    我读到没有必要使用sites enabled https stackoverflow com questions 41303885 nginx do i really need sites available and sites enabl
  • 仅使用 .htaccess 在某些页面上将 http 重写为 https

    我知道关于我的问题有很多话题 我检查了所有这些并尝试了它们 但无法使其工作 我只需要在某些页面上将 http 重写为 https 访问 https 页面后 URL 将返回到 http 这是我到目前为止所拥有的 Rewrite Rules f
  • 使用 MahApps.Metro 时应用程序图标拉伸至标题栏高度

    使用 MahApps Metro 时如何防止应用程序图标拉伸到标题栏的高度 无论使用什么尺寸的图标 图标和标题栏边缘之间都没有空格 我也尝试过使用多尺寸图标 但这不起作用 这是一个开箱即用的示例 强烈启发自mahapps punker76
  • SocketIO ERR_CONNECTION_REFUSED

    我开始使用 NodeJS 和 Socket IO 我正在尝试使用 NodeJS http 服务器设置一个基本示例 并建立到服务器的 Socket IO 连接 我也在使用 Angular JS 基本上我想要的是 当用户按下按钮时 就会建立与服
  • 如何将 JWT 承载令牌添加到 API 的所有请求

    我正在尝试组建一个使用 Asp Net Core Identity Identity Server 4 和 Web API 项目的小项目 我的 MVC 项目已使用 IdS4 进行了正确身份验证 从中我获得了一个 JWT 然后我可以将其添加到
  • 通过 WooCommerce WC_Order_Query 通过元数据获取订单

    如何通过订单号 而不是 ID 获取 WooCommerce 订单 我尝试将 wc get orders 与自定义参数一起使用 例如 wc get orders array number gt 1000 但这似乎不起作用 Thanks 订单号
  • 因子不因式分解绘图的 x 轴标签

    我有一个从 Excel 导入的数据框 其中一列的格式为 dates Oct 17 Nov 17 Dec 17 Jan 18 Feb 18 Mar 18 Apr 18 May 18 Jun 18 Jul 18 Aug 18 所有其他列都只是数
  • ConstraintLayout 内的 ImageView 不起作用

    我在正确显示 ImageView 时遇到问题 我想在 ConstraintLayout 中显示 ImageView 在预览中 它看起来完全符合我的需要 但是当我在设备上启动它时 它看起来完全不同 此布局位于回收视图内 这段代码有什么问题
  • Jasmine 不会从资源管道加载 javascript 文件

    我正在开发一个 gem 并且我已经安装了 Jasminehttps github com pivotal jasmine gem https github com pivotal jasmine gem 我所需的所有 JS 文件都位于 ap
  • Jupyter:禁用重启内核警告

    我使用的是 jupyter 4 1 0 我发现自己经常使用 重新启动并运行全部 功能 每次我使用该按钮时 它都会显示此警告 有没有办法禁用该警告 您可以在笔记本中添加一个单元格并使用以下语句 from IPython core displa
  • 在循环内重新声明 for 循环变量时出错

    考虑以下 C 程序片段 for int i 0 i lt 5 i int i 10 lt Note the local variable printf d i 它编译时没有任何错误 并且在执行时给出以下输出 1010101010 但如果我用
  • ios7 中的自动续订订阅

    我知道这个问题已经被问过很多次了 但没有一个问题对我有帮助 而且我不确定这些答案中哪些在 iOS 7 中仍然有效 我正在做一些带有自动续订订阅的应用程序 我已经成功创建了我的产品 我可以与测试用户一起购买它 我的问题是 检查特定用户是否仍然
  • MouseOver CSS3D效果与javascript

    我正在尝试实现这样的 mouseOver 效果 我能够根据每个图块的位置生成所需的 css3d 矩阵 我通过缓慢的鼠标移动实现了这种效果 但是如果我从一个图块快速移动到另一个图块 则它无法正确更新 它在瓷砖之间显示出间隙 更新鼠标悬停时所有
  • 无法弹出 expo 以做出本机反应

    I want to eject expo to bare react native cli but i can t because I am not able to enter android package name when asked
  • 更好的 cout 又名计数;

    伙计们 编写 countn 会很困难 它基本上会在输入的末尾放置换行符 在使用控制台时 这就是我目前所能做的 我发现每次我希望该行成为新行时都编写 n 非常乏味 或者也许它已经实施了 要避免单行上的多次注入 您可以使用临时对象 该临时对象将
  • 使用 selectExpr 选择其中包含特殊字符的 Spark 数据框列

    我所处的场景是我的列名称Munic pio字母上有重音 My selectExpr命令因此失败 有办法解决吗 基本上我有类似以下的表达式 selectExpr CAST Munic pio as string as Munic pio 我真
  • CSS BETWEEN 选择器?

    我理解 相邻选择器 我想做的是根据元素两侧的 div 上的类来更改元素的样式 例如 div class positive div div class divider div div class negative div 正 和 负 类具有不
  • Kotlin 数据类中可变集合的防御性副本

    我想要一个接受只读列表的数据类 data class Notebook val notes List
  • 为什么 EXC_BAD_ACCESS 如此无用?

    首先我要说的是 我有 Flash AS3 的背景 我意识到 Flash AS3 对大多数事情的要求并不像 iPhone Objective C 那样严格 我怀疑我的问题实际上也适用于 AS3 但让我问它与 Obj c 有关 为什么错误 EX
  • 带有 Grails 的 AOP

    我想在我的 Grails 项目中创建自定义日志记录注释 My code class MyService AuditLog def method1 println method1 called method2 AuditLog def met