Spring aop无法拦截Controller

  今天在已有项目中开发一个spring面向切面的功能,发现切面在Controller中不生效,经查,是由于把aop:aspectj-autoproxy配置在了applicationContext.xml配置文件中了。如果需要切面在Controller中生效,需要在mvc.xml配置文件中增加aop:aspectj-autoproxy proxy-target-class=”true”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.lang.annotation.*;

/**
* @auth zhengzhi.ren
* @date 2015/8/10.
*/

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface LoginRequired {

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

/**
* @auth zhengzhi.ren
* @date 2015/8/10.
*/

@Component
@Aspect
public class LoginCheckAspect{

@Pointcut("@annotation(com.xxx.LoginRequired)")
public void annotation (){}

@Before("annotation ()")
public void before(JoinPoint joinPoint) throws Throwable{
System.out.println(".....");
}
}

spring mvc.xml配置文件中增加:

1
<aop:aspectj-autoproxy proxy-target-class="true"/>