Aspectj没有捕获到Spring框架中的所有事件?

我的项目是基于Spring框架2.5.4。 我尝试为某些控制器添加方面(我使用aspectj 1.5.3)。

我已经在application-servlet.xml中启用了自动代理,只是将这些行粘贴到xml文件的末尾:

<aop:aspectj-autoproxy />
<bean id="auditLogProcessor" class="com.example.bg.web.utils.AuditLogProcessor" />

创建方面:

package com.example.bg.web.utils;

import org.apache.log4j.Logger;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class AuditLogProcessor
{
    private final static Logger log = Logger.getLogger(AuditLogProcessor.class);

    @After("execution(* com.example.bg.web.controllers.assets.AssetThumbnailRebuildController.rebuildThumbnail(..))")
    public void afterHandleRequest() {
        log.info("test111");
    }

    @After("execution(* com.example.bg.web.controllers.assets.AssetThumbnailRebuildController.rebuildThumbnail(..))")
    public void afterRebuildThumbnail() {
        log.info("test222");
    }
}

我的控制器:

class AssetAddController implements Controller
class AssetThumbnailRebuildController extends MultiActionController

当我在aspect顾问中设置制动点并调用控制器时,我只捕获afterHandleRequest(),而不是afterRebildThumbnail()后我做错了什么?

注意

我代表我的朋友无法访问SO测试版问这个问题,我不知道它的全部内容。

编辑

确实有一些拼写错误,谢谢Cheekysoft。 但问题仍然存在。


由于您使用Spring的AOP代理,因此您的断点不会被击中。 有关AOP代理如何特殊的描述,请参阅理解代理代理。

基本上,MVC框架将调用控制器代理上的handleRequest方法(例如,您使用的MultiActionController作为基类实现),然后此方法将对其rebuildThumbnail方法进行“内部”调用,但此将不会通过代理,因此不会涉及任何方面。 (这与方法是最终的无关。)

为了达到你想要的效果,通过加载时织入(使用Spring支持非常好)来调查使用“真实”AOP。


AspectJ在Spring Web MVC框架中不能很好地工作。 阅读页面右侧“Open for extension ...”框的底部

相反,看看HandlerInterceptor接口。

新的Spring MVC Annotations也可以起作用,因为Controller类都是POJO,但我没有自己尝试过。


基本设置看起来不错。

通过不定义就地切入点并指定应用后通知的方法,可以稍微简化语法。 (为方法自动创建方法的命名切入点。)

例如

@After( "com.example.bg.web.controllers.assets.AssetAddController.handleRequest()" )
public void afterHandleRequest() {
    log.info( "test111" );
}

@After( "com.example.bg.web.controllers.assets.AssetThumbnailRebuildController.rebuildThumbnail()" )   
public void afterRebuildThumbnail() {
    log.info( "test222" );
}

只要rebuildThumbnail方法不是最终的,并且方法名称和类是正确的。 我不明白为什么这不起作用。

请参阅http://static.springframework.org/spring/docs/2.0.x/reference/aop.html

链接地址: http://www.djcxy.com/p/41777.html

上一篇: Aspectj doesn't catch all events in spring framework?

下一篇: Redirecting ".local" subdomain to unicast DNS