首页 > 其他分享 >aop动态代理可以用两种技术jdk动态代理和cglib动态代理

aop动态代理可以用两种技术jdk动态代理和cglib动态代理

时间:2024-09-24 17:38:05浏览次数:7  
标签:jdk JDK Spring 代理 接口 CGLIB 动态

Spring AOP(面向切面编程)在实现动态代理时,实际上可以使用两种不同的技术:JDK动态代理和CGLIB动态代理。具体使用哪一种技术取决于具体的情况。

1. **JDK动态代理**:
- JDK动态代理只能代理实现了接口的类。
- 如果目标类实现了一个或多个接口,Spring AOP默认会使用JDK动态代理。
- JDK动态代理创建的代理对象是目标类的接口类型,这意味着你只能通过接口来调用方法。

2. **CGLIB动态代理**:
- CGLIB(Code Generation Library)代理可以代理没有实现接口的类。
- 如果目标类没有实现任何接口,Spring AOP会使用CGLIB来生成代理类。
- CGLIB动态代理通过生成目标类的子类来创建代理对象,因此不能代理`final`类和`final`方法。

Spring会根据以下规则决定使用哪种代理机制:
- 如果目标类实现了至少一个接口,默认使用JDK动态代理。
- 如果目标类没有实现任何接口,Spring会自动切换到使用CGLIB动态代理。
- 你也可以通过配置强制Spring使用CGLIB代理,例如在Spring配置文件中设置`proxy-target-class`属性为`true`。

```xml
<aop:config proxy-target-class="true">
<!-- AOP配置 -->
</aop:config>
```

或者在Java配置中使用`@EnableAspectJAutoProxy`注解:

```java
@EnableAspectJAutoProxy(proxyTargetClass = true)
@Configuration
public class AppConfig {
// Bean definitions
}
```

总结来说,Spring AOP可以根据目标类的结构和配置选择使用JDK动态代理或CGLIB动态代理。

标签:jdk,JDK,Spring,代理,接口,CGLIB,动态
From: https://www.cnblogs.com/zqlmianshi/p/18429647

相关文章

  • mybatis用的jdk的动态代理技术
    MyBatis的动态代理主要使用的是JDK动态代理技术。在MyBatis中,Mapper接口的实现是通过JDK动态代理生成的。具体来说,当你调用Mapper接口的方法时,MyBatis会通过JDK动态代理机制生成一个代理对象,代理对象会拦截对Mapper接口方法的调用,并将这些调用处理为相应的SQL操作。JDK动态代理......
  • @Scheduled注解停止定时任务、@Scheduled设置定时任务不启用、springboot 配置Schedul
    文章目录一、关闭定时任务1.1、方法一:注释@EnableScheduling注解1.1.1、原理1.2、方法二:不加载ScheduledAnnotationBeanPostProcessor类1.3、方法三:注释@Scheduled注解1.4、方法四:设置@Scheduled注解cron时间不开启(推荐)1.4.1、原理在项目中我们可能会遇到这样一......
  • Elasticsearch8.14.3更换自带的openjdk版本
    目录1.背景2.当前版本3.安装指定版本4.配置环境变量5.重启6.验证当前版本7.总结概述:为何更换Elasticsearch集群中的JDK版本背景在部署的Elasticsearch集群中,我们遇到了频繁的CPU使用率飙升问题,导致某些节点宕机。这种情况不仅影响了集群的稳定性和可靠性,还增加了维......
  • 基于JDK1.8和Maven的GeoTools 28.X源码自主构建实践
    目录前言一、GeoTools与Jdk的版本关系1、GeoTools与Jdk版本2、编译环境简介二、使用Maven编译GeoTools28.X1、GeoTools28.x2、Maven的完整编译3、构建时的问题三、总结前言        想要学习和掌握一个开源软件或者项目,源码是我们主要学习的内容。学习开源项目的源代码可以......
  • 让模型评估模型:构建双代理RAG评估系统的步骤解析
    在当前大语言模型(LLM)应用开发的背景下,一个关键问题是如何评估模型输出的准确性。我们需要确定哪些评估指标能够有效衡量提示(prompt)的效果,以及在多大程度上需要对提示进行优化。为解决这一问题,我们将介绍一个基于双代理的RAG(检索增强生成)评估系统。该系统使用生成代理和反......
  • docker 配置代理访问Error response from daemon: Get “https://index.docker.io/v1/
    一、前言报错原因,docker访问不到外网。并且docker不能直接依赖操作系统环境的proxy,因此需要独立配置docker的proxy才能访问外网。问题描述dockersearchmysql出现以下报错:[root@localhost~]#dockersearchmysqlErrorresponsefromdaemon:Get"https://index.docke......
  • 数据飞轮:从静态存储到动态智能化营销的技术演进
    在如今这个数据驱动的商业时代,理解并运用最新的数据技术成为了企业逐鹿市场的重要武器。尤其是在全链路营销和智能推荐的业务场景中,从数据仓库到数据中台再到数据飞轮的发展历程,不仅展现了技术的革新,更是业务模式创新的体现。全链路营销的数据驱动转型在全链路营销领域,企业往往通......
  • 动态IP地址在哪些常见设备上被分配?
    那些常见设备会被分配动态IP移动设备:电子书阅读器、移动游戏机、数码相机电脑、手机、板电脑路由器、交换机服务器、防火墙物联网设备:智能家居设备:智能电视、智能音箱、智能门锁、智能照明、智能插座等工业物联网设备:智能工厂、智能生产线、智能仓储等智能医疗设备:......
  • 深入理解装饰器模式:动态扩展对象功能的利器
    装饰器模式(DecoratorPattern)是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整的前提下,提供额外的功能。装饰器模式通过创建一个装饰类包装原有的类,从而在不改变原有类的基......
  • 【运维自动化-配置平台】动态分组功能使用场景
    蓝鲸智云配置平台,以下简称配置平台配置平台的动态分组功能是业务纬度下对同类资源实例的聚合,并且能动态的跟随符合条件的资源实例增多或减少,例如负责人是admin的主机聚合。目前动态分组的结果聚合支持两种主机集群主机类型的动态分组主机类型的动态分组,条件查询出来的结......