首页 > 其他分享 >论JDK与CGLIB之异同

论JDK与CGLIB之异同

时间:2023-01-11 18:35:19浏览次数:53  
标签:委托 JDK 异同 代理 接口 实现 CGLIB 方法

三种代理方式之间对比

代理方式实现优点缺点特点
JDK静态代理 代理类与委托类实现同一接口,并且在代理类中需要硬编码接口 实现简单,容易理解 代理类需要硬编码接口,在实际应用中可能会导致重复编码,浪费存储空间并且效率很低 好像没啥特点
JDK动态代理 代理类与委托类实现同一接口,主要是通过代理类实现InvocationHandler并重写invoke方法来进行动态代理的,在invoke方法中将对方法进行增强处理 不需要硬编码接口,代码复用率高 只能够代理实现了接口的委托类 底层使用反射机制进行方法的调用
CGLIB动态代理 代理类将委托类作为自己的父类并为其中的非final委托方法创建两个方法,一个是与委托方法签名相同的方法,它在方法中会通过super调用委托方法;另一个是代理类独有的方法。在代理方法中,它会判断是否存在实现了MethodInterceptor接口的对象,若存在则将调用intercept方法对委托方法进行代理 可以在运行时对类或者是接口进行增强操作,且委托类无需实现接口 不能对final类以及final方法进行代理 底层将方法全部存入一个数组中,通过数组索引直接进行方法调用

标签:委托,JDK,异同,代理,接口,实现,CGLIB,方法
From: https://www.cnblogs.com/hx-web/p/17044608.html

相关文章

  • Dockerfile制作jdk-17
    下载jdk-17#wgethttps://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gzDockerfileFROMubuntu:22.04ENVJAVA_HOME=/usr/local/jdk-17.0.5ENV......
  • JDK安装卸载
    卸载1.删除java的安装目录2.电脑-属性-环境变量删除JAVA_HOME3.删除path下的Java目录4.java-version 安装1.jdk8安装包2.文件放在需求目录3.电脑-属性-环境变......
  • jdk 和 jre 区别
    jdk是java开发环境jre是java运行环境区别:jdk目录下有javac也有java,javac负责编译;jre目录下没有javac,只有java我本机javac和java不是一个版本,前者1.8后者1......
  • centos7 卸载OPEN JDK安装方法
    系统环境:CentOS7.5软件:jdk-7u65-linux-x64.tar.gz软件下载地址:​​http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html​​检查系统中......
  • java不同版本jdk切换
    jdk环境搭建首先要有java环境,然后安装两个不同版本的jdk,我这里就使用java8和java15CLASSPATH.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jarJAVA_HOME%JA......
  • Docker构建镜像时,报错:manifest for java:8-jdk-alpine not found: manifest unknown
     今天在用Docker构建镜像时,突然提示构建失败,错误信息如下:错误:manifestforjava:8notfound:manifestunknown:manifestunknown 经查原来是Docker官网弃用了Java......
  • Consider injecting the bean as one of its interfaces or forcing the use of CGLib
    背景今天在写一个数据处理程序的时候,我打算优化一下我的程序,本来是直接用Mapper层进行单行记录保存的,也就是调用的Mapper的insert函数过程然后我就写了一......
  • JDK8下载安装与配置环境变量(linux)
    一、前言基于Linux平台的MySQL安装文件有三个版本,分别是RPM软件、GenericBinaries软件包、源码包,具体介绍如下:①RPM软件包是一种Linux平台下的安装文件,通过相关命令可以......
  • JDK7 和JDK8的ArrayList的区别对比
    示例publicclassArrayListTest{publicstaticvoidmain(String[]args){ArrayList<Object>jdk=newArrayList<>();jdk.add(123);}}......
  • Centos8安装jdk1.8
    今天新采购阿里云服务器需要安装zookeeper组件,而zookeeper组件需要先安装jdk1.8以上版本,需要先安装JDK1.8版。先将操作步骤简单记录:1.安装方法: CentOS8上使用yum直接......