0

我有一个很难解释的问题,所以让我们开始吧:

上下文:我有一个在 tomcat 服务器上运行的应用程序让我们称之为“管理员”。管理员具有导入/导出功能。我们自己的应用程序是对此的扩展,当“管理应用程序”使用导入/导出功能时,我们需要收集一些信息。

问题:包含类 ImportController 的第三方 jar 位于:~/someFolder/admin/WEB-INF/lib/admin.jar. 目标是收集旧项目 ID 和新项目 ID,以便我们的扩展可以将我们的类链接到正确的项目。因为我知道方法签名,但我可以使用 AOP 来做到这一点。

想法:我提出的想法是idHiJacker.jar将包含单个切入点和建议的东西放入~/someFolder/admin/WEB-INF/lib/并启用加载时编织。该建议只是将信息放入 xml 文件中,以便我们的扩展在项目导入后想要放回链接时能够读取它。

另外我必须说我是 AOP 和 web 的纯新手。但是我不希望仅仅为了用 AOP 做这个小操作而导入一个怪物。目前我正在阅读 aspectJ 和 AspectWerkz

问题:

  • 1)我的方向正确吗?你有没有看到任何东西会让这个想法根本不起作用?
  • 2)如果这是可能的,那么以非常干净的方式做这件事的好习惯是什么?
  • 3) 我应该用 AspectJ 来做吗?AspectWerkz?或者是其他东西?
  • 4)我这样做是白费吗?有没有更简单的方法来做这个操作?

编辑:另外,如果你有很好的教程来链接答案,那就太棒了

感谢您的时间和回答

4

2 回答 2

1

问题:

1) Am I in the right direction? Do you see anything that would make this idea not work at all?

我看不出这不起作用的任何原因。除了关注点之外,of 的概念Aspect Oriented Programming是在其他切入点之前或之后执行一些操作,并且通常会影响该建议函数的行为。你在这里就是这样做的。cross-cuttingadvice

2) If this is possible what would be the good practice to do it in a very clean manner?

方面/建议存在一些固有的混乱——由于控制流被劫持更多,因此需要简单的顺序读取代码来了解发生了什么。

3) Should i do it with AspectJ? AspectWerkz? Or Something else?

我从未使用过 AspectWerkz,但我对 AspectJ 有很好的体验;特别是在 stackoverflow 上的支持方面,甚至可能在其邮件列表上提供更多支持。

4) Am i doing this for nothing? Is there an easier way to do that operation?

除非您可以更改导入控制器的代码或更改客户端以进行额外调用来执行链接操作,否则这种基于拦截的方法似乎是最好的恕我直言。

于 2012-06-06T15:51:11.450 回答
0

我有一个更简单的解决方案的建议 - 使用装饰器模式来包装第三方 ImportController,将您的功能放在调用第三方库之前。您应该能够执行此操作,因为您似乎可以访问管理应用程序。

这本质上是在做 AOP 正在做的事情,但是使用代码。您使用加载时间编织器的方法也应该有效,但在我看来很复杂 - 如果您绝对打算这样做,请使用 AspectJ。

于 2012-06-06T15:38:25.997 回答