我正在使用Spring 2.5.6,asm 1.5.3,aspectjrt/aspectjweaver 1.6.1,cglib 2.1_3在我的基于Web的Spring应用程序中,我有以下类:
package uk.co.txttools.aspects;
@Aspect
public class LoggingAspect {
@Before("execution(* uk.co.txttools.web.controller.compose.PreviewMessageController.set*(..))")
public void setLoggingAdvice(){
System.out.println("********************************* Advice run..... set mothod called....");
}
@AfterThrowing("execution(* uk.co.txttools.web.controller.compose.PreviewMessageController.onSubmit(..) throws java.lang.Exception)")
public void hadleException(){
System.out.println("================= PreviewMessageController =========== ON SUBMIT Exception Throwen ==================");
}
@Before("execution(* uk.co.txttools.web.controller.compose.PreviewMessageController.onSubmit(..) throws java.lang.Exception)")
public void OnSubmitAspect(){
System.out.println("================= PreviewMessageController =========== ON SUBMIT CALLED ==================");
}
}
我有一个关于Submit()的应用程序上下文.xml '文件。
我的springapp-servlet.xml
(它在web.xml文件中与org.springframework.web.servlet.DispatcherServlet一起使用)文件看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<aop:aspectj-autoproxy proxy-target-class="true" />
<bean id="loggingAspect" class="uk.co.txttools.aspects.LoggingAspect" />
.
.
下面在相同的xml文件PreviewMessageController
中获取初始化,这意味着我的控制器和方面live是相同的容器。
我没有得到任何异常,而运行应用程序,但我的方面类LoggingAspect
从来没有得到调用。我不知道是什么丢失或我做错了。请帮助我..
谢谢
7条答案
按热度按时间emeijp431#
我不确定我做的是否正确,但对我来说,解决这个问题的方法是将
@Component
添加到“Aspect'ed”类中-(And结束循环-如果您使用基于注解的,不要忘记将
@EnableAspectJAutoProxy
添加到Config类中。okxuctiv2#
对于选择
JavaConfig
的用户,可以将Aspect
声明为bean,并添加@EnableAspectJAutoProxy
注解以打开自动代理:7kjnsjlb3#
终于解决了。
我想我错过了aspectj-maven-plugin。它是Spring编织方面所必需的。但是没有教程提供这个信息。在我的pom.xml中添加了以下内容。
谢谢你们
7nbnzgx94#
如果您还没有尝试过...请尝试基于xml的spring-aop配置,如下所示:
ac1kyiln5#
只是为了使可能的答案列表完整:
在我看来,您的mavenpom.xml中似乎缺少以下依赖项:
yvgpqqbh6#
在配置文件中尝试以下操作:
7gs2gvoe7#
我遇到了这个问题,因为我不知道原因,所以我提到了它。我的问题与组件扫描有关。有一个配置类如下:
方面类位于日志包中,需要将其添加到
@ComponentScan
中。