【问题标题】:GWT Spring Integration - How to do AOP logging?GWT Spring 集成 - 如何进行 AOP 日志记录?
【发布时间】:2011-04-05 11:28:26
【问题描述】:

我有一个 GWT 应用程序,它的 RPC 服务由 GWTHandler bean 处理,以便它可以与 Spring 顺利集成。该应用程序有效。没问题。

我的问题是我无法使用 Spring 进行任何 AOP 日志记录。我喜欢使用 AOP 从 GWT 界面记录用户活动。 (我当然可以用旧方法为用户执行的每个操作调用 RPC 服务并记录这些操作,但这不是 AOP 方式)。我必须在 AOP 中这样做,因为这是客户的要求。

我尝试使用带有通用切入点模式“execution(* .(..))”的普通 Spring AOP。它能够捕获除 GWT 服务之外的所有方法。所以换句话说,它是没有用的。我当然可以使用 AOP 记录后端 Spring DAO,但我怎么知道它来自哪个 RPC 服务?这些 DAO 被许多类和方法(并非 GWT 独有)使用。

我尝试探索 GWT-ENT 包。这看起来不错的样子。但是,它在客户端工作,您的类必须实现 Aspectable。这意味着需要对我的 GWT 应用程序上的所有客户端类进行更改。此外,您不能使用私有方法,因为要使用 GWT-ENT 处理 AOP,您需要通过 GWT.create 而不是 new() 创建类。拥有私有方法会引发错误。我设置了一个简单的应用程序,但真正私有的方法不起作用。

我尝试搜索 GWT-SL 包(我的 GWTHandler 来自哪里)。他们提到了一些关于 AOP 的东西,但是信息非常稀少。谷歌没有给我任何解决方案或例子。

我已经尝试了所有我能想到的方法,并尽我所能在 Google 上搜索,但我找不到解决问题的方法。

我想要做的就是通过 AOP 从我的 GWT 服务中记录方法。假设客户转到“报告”选项卡。然后他点击删除按钮记录。我想通过 AOP 记录该活动。

我正在使用 GWT(带有 SmartGWT)和 Spring/Hibernate 堆栈。

【问题讨论】:

  • 经过一番调查,我决定在 DAO 层而不是 GWT(表示/服务层)中进行 AOP 日志记录,因为我们不关心用户选择哪个可视按钮来删除记录。如果他删除一条记录,它将只使用特定的 DAO。所以 AOP 记录 DAO 层是有意义的。此外,我意识到我遇到困难的另一个原因是因为之前处理我正在处理的项目的程序员混合了服务层和 DAO 层。两者之间应该有清晰的分离。

标签: spring gwt aop logging


【解决方案1】:

Spring AOP 只会在 Spring 上下文中建议 bean 的公共方法,因此 GWT 基础架构已失效,除非您通过 Spring 容器专门实例化它。

您可以使用 AspectJ 的编译时编织将您的 AOP 连接到所有内容中,但它可能会变得有点混乱。除非您正在编译有问题的 GWT 类,否则它是否会起作用也不确定。

【讨论】:

  • GWT 服务是 Spring bean,由第 3 方类(GWTHandler,类似于 Spring 的 SimpleURLHandler - 忘记确切名称)连接。现在,我正在重新评估应该在哪里进行 AOP 日志记录。我认为最好只记录 DAO 而不是 GWT 服务(因为几乎不可能记录它们)。待一切清楚后,我会再次回复。
【解决方案2】:

我会回答我的问题。

我决定在 DAO 层上执行 AOP 日志记录,而不是在 GWT 服务器实现上执行 AOP 日志记录(理论上应该有效,但实际上它不是)。只要确保你记录的是 DAO 而不是 Hibernate Session

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 2018-04-13
    • 2012-09-30
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多