aop-aspectJ的通知不被執行
阿新 • • 發佈:2019-02-19
首先,確保配置檔案都已經是正確的。
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/>