JDK动态代理和CGLIB动态代理的区别

小夏 科技 更新 2024-02-01

#JDK动力学和CGLIB动力学的区别

Spring AOP 中有两种主要的动态方式,JDK 动态和 CGLIB 动态

JDK dynamic 只提供接口,不支持类。

1) JDK 将生成一个动态类 $proxy*。在运行时class .

2)该类实现了目标类的接口,该类实现了接口的所有方法增强。

3)调用时,**类首先调用处理类进行增强,然后通过反射调用目标方法。从而实现AOP

如果类没有实现接口,则 Spring AOP 选择使用 CGLIB 来动态定位该类。

1)CGLIB的底层是通过ASM在运行时动态生成目标类的子类。(还有其他相关类,主要是为了提高调用时的效率)生成多个,

2)并且会覆盖父类的所有方法进行增强,3)调用时,先通过类进行增强,然后直接调用父类的相应方法调用目标方法。从而实现AOP

CGLIB 通过继承是动态的,因此如果一个类被标记为 final,则无法使用 CGLIB 对其进行动画处理。

除了生成目标子类之外,CGLIB 还有一个 fastclass(路由类),该类可以(但不必)通过此类的方法调用进行扩充,而不会使 JDK 等方法调用增强功能失效。

很多人会比较JDK和CGLIB的性能,JDK动态生成类快,调用慢,CGLIB生成类慢,但后续调用。

速度快,在旧版本的 CGLIB 中比 JDK 快 10 倍左右,但实际上,每次版本升级时,JDK 的速度都要高得多,而且。

CGLIB仍然步履蹒跚。

在JDK动态和CGLIB动态的实验中,JDK7和8的动态性能在1W执行下比CGLIB好20%左右。

其他扩展。

1. 动态有什么用**

他可以创造对象。

在原有**不变、原有不变的情况下,原有功能得到增强(有点像装饰器模式)。

解耦允许您将业务功能与日志分离。

二、两种实现方式**

1) JDK动态**:

这是通过以下三个类实现的:proxy、method 和 invocationhandler。

要求目标类必须实现接口。

2)、CGLIB Dynamics**。

原则是继承。

通过创建子类来重写父类的方法,从而增强目标类方法。

3. JDK Dynamics** 演示**

开发步骤:创建目标类接口someservice

j**apackage com.mr.lee.service;

public interface someservice

override

public string doother()

为 InvocationHandler 接口创建一个实现类,该接口实现对目标方法的增强。

j**apackage com.mr.lee.dao;

import j**a.lang.reflect.invocationhandler;

import j**a.lang.reflect.method;

实现 InvocationHandler 接口以增强目标方法的功能。

public class myinvocationhandler implements invocationhandler

override

public object invoke(object proxy, method method, object args) throws throwable

return method.invoke(target,args);等效于 someserviceimpldosome() 方法。

使用类似 jdk 的代理创建**对象,实现创建对象的能力。

j**apackage com.mr.lee;

import com.mr.lee.dao.myinvocationhandler;

import com.mr.lee.service.someservice;

import com.mr.lee.service.someserviceimpl;

import org.junit.test;

import org.springframework.context.applicationcontext;

import org.springframework.context.support.classpathxmlapplicationcontext;

import j**a.lang.reflect.invocationhandler;

import j**a.lang.reflect.proxy;

public class apptest

testpublic void shouldanswerwithtrue()

运行结果。 ``j**a

目前的执行方式是:dosome

当前执行时间:1664091059671

执行了 dosome 方法。

结束时间:1664091059671

目前的执行方式是:doother

执行了 doother 方法。

process finished with exit code 0

4. CGLIB新闻**。

APO的底层实现是动态的,AOP是动态的一种规范化。

原理是实现继承:创建一个子类,子类是**对象,目标类和方法一定不能是final的,

相似文章

    静态 IP 代理怎么样,静态 IP 和动态代理 IP 有什么区别?

    在互联网时代,知识产权已成为一种常见的网络工具。IP可以帮助我们隐藏自己的真实IP地址,提高上网的速度,也可以保护我们的隐私。其中,静态IP和动态IP是两种常用的方法。本文将解释如何设置静态 IP 以及它与动态 IP 的区别。.如何设置静态IP .获取静态 IP 地址。您需要做的第一件事是获取可用的...

    动态代理IP和静态代理IP有什么区别,适用场景有哪些?

    互联网行业的从业者经常使用一种工具,即第一个知识产权工具。动态IP和静态IP是两种常见的IP技术,在网络通信中发挥着重要作用,比如大数据行业的从业者经常需要使用动态IP,跨境行业的从业者经常使用静态IP。它们的主要功能是保护用户IP地址的安全,但在实际应用中存在一些差异和各自的应用场景。本文将介绍这...

    使用动态HTTP代理IP时需要注意什么?

    随着科技的进步和互联网的发展,越来越多的企业需要在业务中使用最好的,那么我们在使用动态http ip时应该注意什么呢?那么就来给大家介绍一下 使用动态http ip时要注意什么 .成本 一直是用户选择 服务时的重要标准,但重要的是要知道,成本往往与服务质量挂钩,在两者之间取得平衡的同时,要找到满足自...

    动态代理IP如何保障网络安全?

    随着互联网的快速发展,网络安全和接入效率已成为人们日常生活中不可忽视的重要问题。动态IP作为一种常见的网络工具,不仅可以保证个人隐私和网络安全,还可以提高网页浏览的速度,已成为现代社会不可或缺的重要工具。动态IP,顾名思义,是指可以动态更改IP地址的服务器。它通过连接到服务器并在用户和目标之间中继 ...

    为什么动态IP代理是隐私保护工具?

    在当今信息飞速发展的时代,互联网已成为人们生活中不可或缺的一部分。然而,随之而来的网络安全问题也越来越突出。为了保护个人隐私和数据安全,动态IP 已成为重要的网络工具。动态IP 顾名思义,是一种可以动态更改IP地址的服务器。它通过将用户的网络请求发送到服务器,然后将服务器发送到目标来隐藏用户的真实 ...