• aspectj this target within 区别


    首先他们三个都匹配一个明确的类型 里面的所有方法 不能带有方法,包名等通配符

    只能写成  within(包名.类名格式)

    假设有一下继承关系

      有一个接口 A ,这个接口有一个实现类A1

      A1 有两子类 B,C

    1 within 只能匹配指定类型不能匹配子类,并且对比类型是目标类型,target 和 this 可以

    2 this 对比类型是生成的代理对象的类型(也可能不会生成代理类,如果没有增强逻辑)

        

      打印类信息类似: com.lomi.aspectj.Fan$$EnhancerBySpringCGLIB$$5152d3d4 的是cgLib 代理

      打印类信息类似: com.sun.proxy.$Proxy4 的是jdk 动态代理

    3 target 对比的类型 目标对象的类型

      指的就是你自己写的java类或者接口,你真是使用的可能是 你定义的类型,也可能是 代理类(有aop 增强逻辑的this和target类型不同,没有增强逻辑的 this 和 target 类型相同)

    4 this 和 target 的不同点

      区别在于匹配类型是实现类(比如 C,或者B的时候),而不是父接口,并且使用 jdk 代理的时候  

      使用 cglib 代理的时候 this(C) 和 target(C) 都能匹配到C  (这时候你获取到的 真实对象是 $$EnhancerBySpringCGLIB 类型)

      使用 jdk 代理的时候 this(C) 和 target(C) 只有 target(C) 才能匹配到 C(这时候你获取到的 真实对象是 com.sun.proxy.$Proxy 类型)

      备注:如果 this(A) 和 target(A) 在任何时候匹配的都是一样的,能匹配到

    5 within 和 target ,this  的不同点

      within 只能 匹配指定类型不能匹配到实现类子类,target 和 this都可以匹配到子类

      

      with(A) 是匹配不到 B,C的 ,也匹配不到 A1

      within(A+) 可以匹配到 A1,B,C (  通配符 + 匹配子类) 这时候等同于 target(A)

  • 相关阅读:
    关于pandas里面的合并
    关于动态规划的一丢丢研究
    结巴分词详细讲解
    k折交叉验证
    Boosting和Bagging的异同
    批量归一化的原理
    深度学习模型参数初始化的方法
    NLP 装桶(Bucketing)和填充(padding)
    facebook 摘要生成阅读笔记(二) Abstractive Sentence Summarization with Attentive Recurrent Neural Networks
    facebook 摘要生成阅读笔记(一) A Neural Attention Model for Sentence Summarization
  • 原文地址:https://www.cnblogs.com/cxygg/p/16485794.html
Copyright © 2020-2023  润新知