当前位置: 首页 > wzjs >正文

电子商务网站建设多少钱广州网络推广公司

电子商务网站建设多少钱,广州网络推广公司,wordpress自定义页面模板,香港域名注册商AOP的cligb代理和jdk代理 spring默认创建的是clibg代理对象,如果想要让spring创建jdk代理对象,那么需要: 1、确保目标类实现至少一个接口 2、配置Spring强制使用JDK代理,EnableAspectJAutoProxy(proxyTargetClass false) Con…

AOP的cligb代理和jdk代理

spring默认创建的是clibg代理对象,如果想要让spring创建jdk代理对象,那么需要:

1、确保目标类实现至少一个接口

2、配置Spring强制使用JDK代理,@EnableAspectJAutoProxy(proxyTargetClass = false)

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = false) // 关键设置
public class AppConfig {// 配置类内容
}

cligb代理对象代理流程:

  1. Spring为某些Bean创建CGLIB代理对象
  2. 调用方法时实际调用代理对象的方法
  3. 代理对象执行intercept()方法
  4. 生成拦截器链(由多个MethodInterceptor组成)
  5. 链执行器按顺序执行拦截器链中的每个拦截器的invoke方法,实际就是调用增强方法。
  6. 在合适的时机调用原始目标方法

无论是创建CGLIB代理对象、还是执行intercept()方法,实际上都是CglibAopProxy类里的方法。

class CglibAopProxy implements AopProxy, Serializable{public Object getProxy() {}public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {//这里可以具体看我的另一篇文章,有详细介绍源码:https://blog.csdn.net/m0_73866527/article/details/148384920?spm=1001.2014.3001.5501}
}

jdk代理对象代理流程:

  1. Spring为某些Bean创建jdk代理对象
  2. 调用方法时实际调用代理对象的方法
  3. 代理对象执行invoke()方法
  4. 生成拦截器链(由多个MethodInterceptor组成)
  5. 链执行器按顺序执行拦截器链中的每个拦截器的invoke方法,实际就是调用增强方法。
  6. 在合适的时机调用原始目标方法

无论是创建CGLIB代理对象、还是执行intercept()方法,实际上都是JdkDynamicAopProxy类里的方法。

final class JdkDynamicAopProxy implements AopProxy, InvocationHandler {public Object getProxy() {return getProxy(ClassUtils.getDefaultClassLoader());}public Object getProxy(@Nullable ClassLoader classLoader) {// 1. 获取目标接口Class<?>[] proxiedInterfaces = AopProxyUtils.completeProxiedInterfaces(this.advised);// 2. 关键:创建JDK代理实例return Proxy.newProxyInstance(classLoader, proxiedInterfaces, this);}// 实现InvocationHandler接口public Object invoke(Object proxy, Method method, Object[] args) {// 拦截逻辑// 获取目标对象(原始Bean)Target target = getTarget();// 创建拦截器链 - 与你熟悉的CGLIB完全一致!List<Object> chain = this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass);// 创建方法调用链执行器MethodInvocation invocation = new ReflectiveMethodInvocation(proxy, target, method, args, targetClass, chain);// 执行拦截器链 - 核心流程与你已知的CGLIB完全一致return invocation.proceed();}
}

在这里插入图片描述

在这里插入图片描述

这时候你肯定有疑惑,为什么代理对象执行目标方法时,会自动执行intercept方法或invoke方法?

在对象创建时通过字节码生成技术,将调用路径"刻印"在代理对象的DNA中,使得后续所有方法调用都能自动路由到正确的处理逻辑!

(这里留个坑,先不细挖了)

那么你又会有疑惑,为什么这两个代理方式差不多,为什么还需要有这两种代理方式呢?

维度JDK动态代理CGLIB代理差异影响
代理机制接口代理(实现相同接口)子类代理(继承目标类)根本设计哲学不同
目标要求必须实现接口类不能是final适用场景分化
性能特点创建快(≈15ns),调用慢(反射开销)创建慢(≈200ns),调用快(直接调用)高频调用场景选择关键
方法覆盖只能代理接口方法可代理所有非final方法功能覆盖范围不同
内存占用轻量级(约256字节)重量级(约1-2KB)资源敏感系统选择依据

- JDK代理是通过反射调用目标方法(因为代理对象和目标对象没有继承关系,只有共同的接口,所以只能反射调用目标对象的方法)。

- CGLIB代理是通过直接调用(通过方法索引,类似直接调用)父类(目标类)的方法(因为代理对象是目标对象的子类,所以可以调用父类方法)。

  • JDK代理 = "翻译官"模式
    • 需要懂双方语言(接口)
    • 每次沟通都要翻译(反射)
    • 适合临时简单任务
  • CGLIB代理 = "机械臂"模式
    • 直接嵌入操作环境(继承)
    • 预设精确操作指令(直接调用)
    • 适合高频重复任务
http://www.dtcms.com/wzjs/426554.html

相关文章:

  • 免费1级做爰片在线网站百度seo排名优化教程
  • 广州海珠区天气预报seo有些什么关键词
  • 用网站名查询网址地推拉新app推广接单平台
  • 做深圳门户网站起什么名字好建个网站费用多少
  • 在电脑新建网站站点广东疫情动态人民日报
  • 香奈儿网站建设策划书产品线上推广方式都有哪些
  • 滨江道做网站公司seo关键词优化系统
  • wordpress分享获得积分引擎优化搜索
  • 河南零距离文化传播 网站建设销售平台有哪些
  • 网站做接口怎么做私域流量运营管理
  • 企业网站做seo品牌策划案
  • wordpress木马查杀安卓优化大师下载安装到手机
  • 建立网站有哪些步骤深圳市龙华区
  • 芜湖网站开发公司电话seo收索引擎优化
  • 膜结构网站推广怎么做全网营销推广方案
  • 高端制造业seo查询站长工具
  • wordpress添加富强短视频搜索优化
  • 网站制作需要什么人员网络整合营销方案ppt
  • 手机网站建设软件有哪些内容福州网站seo公司
  • 网站建设与管理的体会百度推广怎么收费标准案例
  • 课堂网页设计素材seo教程 seo之家
  • 湛江市建设规划局网站黑马培训
  • 聊天网站备案seo独立站优化
  • 东莞专业做网站湖南网站建设效果
  • 做网站推广代理淘宝关键词优化软件
  • 常用的网站开发语言有哪些品牌推广方案怎么写
  • 做的网站怎么放视频竞价推广账户竞价托管公司
  • 长安高端装备网站设计公司百度广告一天多少钱
  • 网站建设与管理职责关键词优化排名软件推荐
  • 凤台做网站秘密入口3秒自动进入