当前位置: 首页 > 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/305097.html

相关文章:

  • 网站建设开发方式软件开发app制作
  • wp网站怎么用插件做html网页销售网站排名
  • 安徽省建设工程测试研究院网站网站关键词推广价格
  • 贵阳微网站建设网络营销教程
  • 购物商城网站建设多少钱磁力狗
  • 上海全国网站建设网站如何快速收录
  • 手机网站设计图阿里云域名注册万网
  • 奢侈品网站怎么做tuig优化谷歌推广代理商
  • 怎么用网吧电脑做网站服务器吗深圳抖音seo
  • 微信开发者工具怎么在手机打开网站如何优化推广
  • 西安凤城二路网站建设网站自然优化
  • 太原网站模板今天最新的新闻头条新闻
  • 山西cms建站系统价格哪家网站推广好
  • 怎么给网站做404界面推广平台app
  • 自己做网站怎么样惠州seo招聘
  • 两学一做 专题网站怎样开网站
  • 西安网站seo优化合肥网站seo费用
  • 北京网站建设最便宜的公司哪家好百度网盘官网登陆入口
  • 武汉网站推广报价百度指数官网查询
  • 长沙做php的网站建设产品市场推广方案
  • 大连餐饮网站建设青岛网络科技公司排名
  • 手机网站和电脑网站一样吗b2b免费网站推广平台
  • 怎样做网站优化排名搜索引擎优化方法
  • 网站首页怎么做ps快速整站优化
  • 幼儿园网站静态模板搜索引擎优化的例子
  • 广西营销型网站公司seo的基础是什么
  • 网站建设调查的问卷广告宣传语
  • 网站链接视频怎么做北京seo服务
  • WordPress与hexo的区别百度关键词优化曝光行者seo
  • 网站如何做标题优化seo推广百度百科