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)
posted on 2022-07-17 02:02 zhangyukun 阅读(121) 评论(0) 编辑 收藏 举报