Spring Boot AOP 注解拦截失效

新手上路,请多包涵

期望: 使用SpringBoot + AOP, 自己定义一个注解,通过AOP拦截放置了注解的方法。
存在问题:当注解放置在带有GetMapping等controller入口注解的方法上能拦截到,但是注解放到其他方法上拦截不到。

主要代码:

  1. 注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Lock {
}

2.切面

@Aspect
@Component
public class HelloAspect {


    @Around("@annotation(myLock)")
    public Object around(ProceedingJoinPoint pjp, Lock myLock) {
        //获取注解里的值
        System.out.println("in around");
        try {
            return pjp.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            return null;
        }
    }


}

3.Controller

@RestController
public class HelloController {


    // 防在这里可以拦截
    @GetMapping("/hello2")
    @Lock
    public String hello2() {
        return "hello2";
    }

    @GetMapping("/hello")
    public String hello() {
        a();
        return "hello";
    }

    // 放在这里拦截不到
    @Lock
    protected void a(){
        System.out.println("aaa");
    }


}
阅读 14.7k
2 个回答
@Autowired
private HelloController helloController;
再调用helloController.a()方法就可以了

helloController是代理对象,调用AOP才会生效,
直接调用a()方法是当前对象调用,不是代理对象,所以无效

应该是 @RestController 注解的事情 可以 使用 @Service 等注解试试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题