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的配置文件里了吗?
------解决方案--------------------
包如果包含了所有的类,那你就扫描了两次而且注入了两套,MVC调用的那套Service是没有做事务的,你可以把扫描的包分开,让MVC只扫Controller,或者直接在MVC的配置文件里面做事务配置。
试试看,也许有用。