zoukankan      html  css  js  c++  java
  • 同类中不带注解的方法调用带注解的方法,注解失效?

    正好工作中遇到的问题,在这里记录。

    一、问题背景:

    自定义的注解,在方法拦截器中进行拦截,必须在同类实行嵌套调用,而且不能改动调用方式。

     上层方法的调用:

     二、内部逻辑:

     大家都知道,想让注解生效,根据spring的原理,必须使用代理对象去调用带注解的方法,而同类方法调用,类似this调用,this是当前对象,从而导致注解失效。

    所以问题就变为:让this成为代理对象。this又从哪里来呢?this代表当前对象,即userServiceCry,可userServiceCry的代理对象和目标对象(target对象)是分开的(这是因为spring是通过cglib实现代理的)。

    userServiceCry对象在走完代理内容之后,就会把原始对象传递回来赋值给this,根据事务的传递性,我们必须让userServiceCry将代理对象传递给this。
    这时候我们再来看看,代理对象调用方法的流程。
    方法拦截器:

     代理对象最终会走进MethodInterceptor接口的实现类的intercept方法中,走完这个拦截方法,就会把原始对象传过去,去走方法的实现体。

    此时我们把代理对象传过去就可以啦。

    三、结语:
    记住一定要调用invokeSuper方法,而不是invoke方法。这涉及到代理类其实是原始的子类的问题,有兴趣的可以私信我。
  • 相关阅读:
    【题解】一本通例题 S-Nim
    【题解】一本通例题 取石子游戏
    【题解】[USACO09NOV]A Coin Game S
    【题解】取火柴游戏
    【题解】CF375D Tree and Queries
    Linux sudo用户提权与日志审计
    No space left on device
    CentOS下多种方法显示文本行号
    Python之行-01之初识python
    约瑟夫问题
  • 原文地址:https://www.cnblogs.com/caozyblogs/p/15038272.html
Copyright © 2011-2022 走看看