Aspectj不会在Spring框架中捕获所有事件吗?

Serge:

我的项目基于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

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

注意

我代表无法访问SO beta的朋友问这个问题,我不知道这是怎么回事。

编辑

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

埃德·托马斯(Ed Thomas):

由于使用的是Spring的AOP代理,因此不会遇到断点。有关AOP代理如何特殊的描述,请参见理解aop代理

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章