日期:2014-05-18  浏览次数:20692 次

Spring AOP 拦截不到SpringMVC的Controller
我想用 AspectJ 方式实现拦截,配置都是采用注解的方式,但失败了,拦截不到?!

spring关于注解的配置如下:



AOP的拦截类如下:(刚开始execution写的是自己项目包的controller类,后来百度说什么controller比较特殊,要用下面这样子,结果还是不行。。。)

@Component
@Aspect
public class Interceptor {
     
 
    @Around("execution(* org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(..))")   
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{  
        System.out.println("进入环绕通知");  
        Object object = pjp.proceed();//执行该方法  
        System.out.println("退出方法");  
        return object;  
    }  
}


controller部分代码如下:

@Controller
@RequestMapping("/student")
public class UserController {
 
    @RequestMapping("/save.do")
    public void save(){
        System.out.print("SUCCESS!");
    }
}


做试验的时候save()方法会执行,但是没有被 interceptor 拦截到,最后只输出"SUCCESS"

是注解配置错误还是什么……弄了一天都不知所以然,求搭救 。。。
------解决方案--------------------
例子
http://codebrane.com/blog/2014/01/23/adding-authentication-to-spring-controller-methods-with-aspectj/
------解决方案--------------------
你的Spring几个配置文件?注解配置加到mvc的配置文件里了吗?
------解决方案--------------------
引用:
Quote: 引用:

你的Spring几个配置文件?注解配置加到mvc的配置文件里了吗?


两个配置文件,一个配置spring和hibernate的集成,一个配置springMVC,两个都有写

<context:annotation-config>
<context:conponent-san base-package="包">

<aop:aspectj-autoproxy /> 写在第一个里



包如果包含了所有的类,那你就扫描了两次而且注入了两套,MVC调用的那套Service是没有做事务的,你可以把扫描的包分开,让MVC只扫Controller,或者直接在MVC的配置文件里面做事务配置。
试试看,也许有用。