spring aop:aspectj-autoproxy 配置


經常遇到aop-aspectJ的通知不被執行的問題

解決方法:http://blog.csdn.net/qwdafedv/article/details/53005210

 

首先,確保配置文件都已經是正確的。

1、首先,把所寫的通知所在的類交於spring來管理

<context:component-scan base-package="me.sui.user.aop" />

注意,其頭部文件:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd ">

2、然后,應該還有一條

<aop:aspectj-autoproxy/>

之所以沒有和上面放在一起,等會再說。

3、切面通知類

package me.sui.user.aop; import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; /** * 注冊切面 * @author qubianzhong * */ @Aspect @Component public class RegisterAspect { /** * studentService */ @Autowired @Qualifier("studentService") private StudentService studentService; /** * 后置通知,用戶注冊成功后,將注冊數據信息發送到神策數據進行分析 * @param joinPoint 接入點 * @param result 目標方法的返回結果 */ @AfterReturning(value="execution(* me.sui.user.rest.StudentRestController.register(..))", returning = "result") public void afterMethod(JoinPoint joinPoint,Object result){ if((boolean) result){ } } }

4、以上都准備妥當后,通知還不可以被執行,是因為下面這幾個坑:

一、我所攔截的類,即被切的類,是個servlet;只有當切面類和被切面類都被spring來管理的時候,通知才可以使用。


二、基於第一條,如果你換成攔截器也是不行的。


三、如果你使用的是springMVC,你所攔截的切面類也是個controller,但是,還是不行,可能就是因為你把

<aop:aspectj-autoproxy/>

也放在了application.xml中了。可能是springmvc的bug吧。你把

<aop:aspectj-autoproxy/>

放到DispatcherServlet所對應的**-servlet.xml配置文件中,就可以了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM