gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:31:28 24 4
gpt4 key购买 nike

我的项目基于spring framework 2.5.4。我尝试为某些 Controller 添加方面(我使用 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");
}
}

我的 Controller :

class AssetAddController implements Controller
class AssetThumbnailRebuildController extends MultiActionController

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

注意

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

编辑

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

最佳答案

您的断点没有被命中,因为您使用的是 Spring 的 AOP 代理。参见 understanding-aop-proxies有关 AOP 代理的特殊之处的描述。

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

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

关于java - Aspectj 没有捕获 spring 框架中的所有事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com