是否有可能围绕其他方面

时间:2011-07-12 18:38:57

标签: ant aspectj

我的问题与this question

有关

我们有不同的方面类在应用程序的不同部分(Swing中的胖客户端)上执行@around建议来测量执行时间。

我有另一个方面(ExceptionHandler)在我写的所有方面方法上做@around。

我这样做是为了避免创建的方面会抛出异常并使客户端应用程序失败。所以基本上,我尝试捕获我的其他@around方法的Proceed,只记录出现的异常。当我检测到它来自proceedingJoinPoint

时,我只抛出异常
if (joinPoint.getSignature().getDeclaringTypeName().equalsIgnoreCase("org.aspectj.lang.ProceedingJoinPoint")) {
            throw exception;
        }

这样做有效吗?

在使用AJDT的Eclipse中,应用运行良好,我测试了ExceptionHandler,它按预期工作。

但在其他环境中。 (集成)一旦遇到带有此错误的exceptionHandler建议的行,应用程序就会失败

Exception in thread "main" java.lang.NoSuchMethodError:     com.xxx.yyy.aop.aspect.ExceptionHandlerAspect.aspect
 Of()Lcom/xxx/yyy/aop/aspect/ExceptionHandlerAspect;
    at     com.xxx.yyy.aop.aspect.ecs.AspectBaseEcs.inspectLoginInfo(AspectBaseEcs.java:65)
    at com.xxx.yyy.app.es.security.Security.loadApplications(Security.java:172)
    at com.xxx.yyy.app.es.gui.VSDlgLogin.loadSecurity(VSDlgLogin.java:346)
    at com.xxx.yyy.app.es.ApplicationSuite.start(ApplicationSuite.java:839)
    at com.xxx.yyy.app.es.ApplicationSuite.main(ApplicationSuite.java:501)

我还反编译代码,看看aspectOf()是否被编织到我的ExceptionHandler中,方法就在那里!!!!!!! ???????????

为什么这个错误会上升......?

我很无能。

1 个答案:

答案 0 :(得分:0)

终于找到了问题。我们的应用程序依赖于包含方面的公共模块jar。

基本包名是相同的:com.xxx.aop和我们用于方面的基类是同一个名字!!!!所以加载了2个com.xxx.aop.AspectBase.class。

由于我们在ant构建文件中使用了一个标志来启用编译时编织为yes / no,因此我们的AspectBase.class之一没有编织而另一个是。

不敢相信我之前没有看到!!!!!