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

Ser*_*rge 7 java spring spring-aop

我的项目基于spring framework 2.5.4.我尝试为某些控制器添加方面(我使用aspectj 1.5.3).

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

<aop:aspectj-autoproxy />
<bean id="auditLogProcessor" class="com.example.bg.web.utils.AuditLogProcessor" />
Run Code Online (Sandbox Code Playgroud)

创建方面:

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

class AssetAddController implements Controller
class AssetThumbnailRebuildController extends MultiActionController
Run Code Online (Sandbox Code Playgroud)

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

注意

我代表我的朋友问这个问题,他不能访问SO beta,我也不知道它是什么.

编辑

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

Ed *_*mas 2

你的断点没有被击中,因为你正在使用 Spring 的 AOP 代理。有关 AOP 代理有何特殊之处的描述,请参阅Understanding-aop-proxies 。

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

为了实现你想要的,请研究通过加载时编织(Spring 很好地支持)使用“真正的”AOP。