【发布时间】: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 层。两者之间应该有清晰的分离。