前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >aop-aspectJ的通知不被执行

aop-aspectJ的通知不被执行

作者头像
qubianzhong
发布2018-09-19 13:38:18
8230
发布2018-09-19 13:38:18
举报
文章被收录于专栏:行者常至行者常至
首先,确保配置文件都已经是正确的。
1、首先,把所写的通知所在的类交于spring来管理
代码语言:javascript
复制
<context:component-scan base-package="me.sui.user.aop" />
注意,其头部文件:
代码语言:javascript
复制
<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、然后,应该还有一条
代码语言:javascript
复制
<aop:aspectj-autoproxy/>
之所以没有和上面放在一起,等会再说。
3、切面通知类
代码语言:javascript
复制
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,但是,还是不行,可能就是因为你把

代码语言:javascript
复制
<aop:aspectj-autoproxy/>

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

代码语言:javascript
复制
<aop:aspectj-autoproxy/>

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年11月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先,确保配置文件都已经是正确的。
  • 1、首先,把所写的通知所在的类交于spring来管理
  • 注意,其头部文件:
  • 2、然后,应该还有一条
  • 之所以没有和上面放在一起,等会再说。
  • 3、切面通知类
  • 4、以上都准备妥当后,通知还不可以被执行,我当时是因为下面这几个坑:
  • 一、我所拦截的类,即被切的类,是个servlet;只有当切面类和被切面类都被spring来管理的时候,通知才可以使用。
  • 二、基于第一条,如果你换成拦截器也是不行的。
  • 三、如果你使用的是springMVC,你所拦截的切面类也是个controller,但是,还是不行,可能就是因为你把
  • 也放在了application.xml中了。可能是springmvc的bug吧。你把
  • 放到DispatcherServlet所对应的**-servlet.xml配置文件中,就可以了。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档