Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Aspectj不';不能捕获spring框架中的所有事件?_Java_Spring_Spring Aop - Fatal编程技术网

Java Aspectj不';不能捕获spring框架中的所有事件?

Java Aspectj不';不能捕获spring框架中的所有事件?,java,spring,spring-aop,Java,Spring,Spring Aop,我的项目基于SpringFramework 2.5.4。我尝试为一些控制器添加方面(我使用aspectj 1.5.3) 我在application-servlet.xml中启用了自动代理,只是将以下行粘贴到xml文件的末尾: <aop:aspectj-autoproxy /> <bean id="auditLogProcessor" class="com.example.bg.web.utils.AuditLogProcessor" /> 我的控制器: class As

我的项目基于SpringFramework 2.5.4。我尝试为一些控制器添加方面(我使用aspectj 1.5.3)

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

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

class AssetAddController implements Controller
class AssetThumbnailRebuildController extends MultiActionController
当我在aspect advisors中设置制动点并调用控制器时,我只捕获AfterHandlerRequest(),而不捕获afterRebildThumbnail() 我做错了什么

注意

我代表我的朋友问这个问题,他没有访问SO beta的权限,我不知道这是怎么回事

编辑


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

AspectJ不能很好地与SpringWebMVC框架中的类一起工作

相反,请看一下接口


从那时起,新的SpringMVC注释也可以工作,控制器类都是POJO,但我自己还没有尝试过

这和拼写一样简单吗?或者只是问题中的拼写错误? 有时您编写
重建缩略图
,有时您编写
重建缩略图

您试图用建议覆盖的方法不是MVC框架中的最终方法,因此虽然bpapas答案很有用,但我的理解是,在这种情况下这不是问题所在。但是,请确保
重建缩略图
控制器操作不是最终操作


@bpapas:如果我错了,请纠正我。程序员自己的控制器动作是他试图覆盖的。查看MultiActionController源代码(及其父代码),堆栈中唯一可能最终确定的方法是
MultiActionController.invokeNamedMethod
,尽管我不能100%确定该方法当时是否在堆栈中。将最终确定的方法放在堆栈的更高位置会导致向更低位置的方法添加AOP建议时出现问题吗?

基本设置看起来正常

通过不定义就地切入点,只指定应该应用after建议的方法,可以稍微简化语法。(方法的命名切入点将自动为您创建。)

e、 g

只要RebuildHumbnail方法不是final,并且方法名称和类是正确的。我不明白这为什么行不通


请参见

因为您使用的是Spring的AOP代理,所以未命中断点。有关AOP代理如何特殊的说明,请参阅

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

为了实现您想要的,可以通过加载时编织(Spring非常支持)来研究使用“真正的”AOP

class AssetAddController implements Controller
class AssetThumbnailRebuildController extends MultiActionController
@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" );
}