AOP切点未生效

定义了注解Check

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RUNTIME)
public @interface Check {
    // 字段校验规则,格式:字段名+校验规则+冒号+错误信息,例如:id<10:ID必须少于10
    String[] value();

}

和切面类

@Aspect
@Component
public class CheckParamAspect {
private static final Logger LOG = LoggerFactory.getLogger(CheckParamAspect.class);
    @Pointcut("@annotation(xx.xx.xx.checker.Check)")
    public void annotationPoinCut(){}

//
//    @Pointcut("execution(public * xx.xx.xx.controller..*.*(..))")
//    public void  annotationPoinCut(){}

    @Around("annotationPoinCut()")// 
    public Object check(ProceedingJoinPoint point) throws Throwable {
LOG.debug("aop check");

}

}

希望达到的效果是所有被@check注解的方法 执行check()

在controller中

@RequestMapping(value = "/check", method = RequestMethod.GET)
public void check(HttpServletRequest request) {
    System.out.println("收到请求"+request.toString())    ;
    testValid(xxx)

}

@Check

testValid(xxx)

现象:发现@check标签并没有增强testValid()方法;

原因:testValid(xxx) 是嵌套调用的 这种调用是调用的类本身的testVaild方法 而非  Spring生成的代理类的增强后的testVaild方法

所以不会打印“aop check”

解决方法

@Autowired private TestController self;

用self.testValid()就是增强后的testValid方法了

参考:[Done]Spring @Pointcut 切点调用不到(SpringAOP嵌套方法不起作用) 注意事项 - 大辉_FFf - 博客园

java - Spring自定义注解不生效原因解析及解决方法_个人文章 - SegmentFault 思否

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值