鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ Spring Boot AOP 注解攔截失效

Spring Boot AOP 注解攔截失效

期望: 使用SpringBoot + AOP, 自己定義一個(gè)注解,通過AOP攔截放置了注解的方法。
存在問題:當(dāng)注解放置在帶有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");
    }


}
回答
編輯回答
陌離殤
@Autowired
private HelloController helloController;
再調(diào)用helloController.a()方法就可以了

helloController是代理對(duì)象,調(diào)用AOP才會(huì)生效,
直接調(diào)用a()方法是當(dāng)前對(duì)象調(diào)用,不是代理對(duì)象,所以無效

2018年9月11日 05:31