springboot2.x默认采用cglib代理,以及配置jdk动态代理的方法

2023-11-19

众所周知,springboot开启AOP需要在启动类加上注解 @EnableAspectJAutoProxy ,但开发过程中发现即使不加@EnableAspectJAutoProxy 注解,bean还是被代理过,而且是Cglib代理对象。

此时在启动类加上@EnableAspectJAutoProxy(proxyTargetClass = false)关闭cglib代理,但发现 proxyTargetClass 参数设置无效,生成的代理bean仍为cglib代理。

跟踪源码发现在处理aop过程中,aop入口类 @EnableAspectJAutoProxy -> spectJAutoProxyRegistrar -> registerOrEscalateApcAsRequired(AnnotationAwareAspectJAutoProxyCreator.class, registry, source) 发现连续进入了两次注册方法,其中一次指定的 proxyTargetClass为true,跟踪 ConfigurationClassPostProcessor中处理Import类的方法,发现另一个标注了 @EnableAspectJAutoProxy 注解的类:AopAutoConfiguration,这个类是springboot的自动配置类,也就是说springboot默认自动开启了AOP,

@Configuration
@ConditionalOnClass({ EnableAspectJAutoProxy.class, Aspect.class, Advice.class, AnnotatedElement.class })
@ConditionalOnProperty(prefix = "spring.aop", name = "auto", havingValue = "true", matchIfMissing = true)
public class AopAutoConfiguration {

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = false)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false",
matchIfMissing = false)
public static class JdkDynamicAutoProxyConfiguration {

}

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true",
matchIfMissing = true)
public static class CglibAutoProxyConfiguration {

}
}

其中参数proxy-target-class ,从配置spring.aop.auto读取,默认为true

因此在配置文件中加上spring.aop.auto=false后,代理对象变成了JdkDynamic

我的springboot版本为2.1.x,可以看到默认已经采用cglib代理,个人也感觉不到什么不一样,性能上讲,其实jdk1.8后JdkDynamic性能并不差,不过使用 cglib 后可以直接用实现类注入

比如

@Autowired
ServiceImpl service

毕竟在开发过程中我们的bean中的方法并不一定都在接口中定义,可能会从其他类中继承,这样用接口注入就无法访问这些方法,只能接使用实现类注入,采用cglib可满足这一需求

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot2.x默认采用cglib代理,以及配置jdk动态代理的方法 的相关文章

  • 《机器人操作系统入门》课程代码示例安装出错解决方法

    问题描述 学习 机器人操作系统入门 课程时 在Ubuntu 16 04 上安装了kinetic 安装ROS Academy for Beginners时依赖总是报错 如下所示 rosdep install from paths src ig
  • endnote插入的不是序号(而是大括号加上作者)的解决

    仅作为记录 大佬请跳过 之前用word通过endnote导入文献 都是可以的 在正文出现 1 的引用 但是博主新的word 需要修改参考文献 因此拟重新导入参考文献来修改 但发现导入的都是 Dou 2017 在正文中 文章目录 解决 参考
  • 50多个开源PDF阅读编辑工具汇总

    PDF Editing Creation 50 open source free alternatives to Adobe Acrobat 文章来源于这里 版权归原作者所有 Adobe Acrobat is expensive but t
  • QT QTableWidget 表格 学习笔记

    首先 了解一下QTableWidget 控件的属性 成员方法 功能 setText const QString text 设置单元格中的文本 setlcon const Qlcon icon 给单元格添加图标 setBackground c
  • unity3d 输入法相关API

    Input inputString 获取输入的文字 正在打的中文是接受不到的 只有在文字写到文本框才能获取 Input imeCompositionMode 是否是激活输入框状态 on 是 Input compositionString 空
  • 软件测试之登录测试详解

    一 功能测试 登录 功能性测试用例包括 1 什么都不输入 点击提交按钮 看提示信息 非空检查 2 输入已注册的用户名和正确的密码 验证是否登录成功 3 输入已注册的用户名和不正确的密码 验证是否登录失败 并且提示信息正确 4 输入未注册的用
  • mysql将执行过的sql放到历史记录里面

    查看是不是开启将历史执行的sql存入文件 show variables like general log 输出结果如下 gt Variable name Value
  • Anaconda安装教程

    文章目录 1 下载链接 2 安装步骤 3 确认已安装Anaconda 4 问题解决 4 1问题一 4 2问题二 1 下载链接 Anaconda百度网盘链接 点击即可进入百度网盘 提取码u5fx 建议不要去官网下载最新版本的 因为后期可能会遇
  • H264视频传输、编解码----RTSP认证

    Rtsp认证主要分为两种 基本认证 basic authentication 和摘要认证 digest authentication 基本认证是http 1 0提出的认证方案 其消息传输不经过加密转换因此存在严重的安全隐患 摘要认证是htt
  • 智能门禁(2)---安检人脸识别人证验证系统解决方案

    安检人脸识别人证验证系统解决方案方案 一 概述及特点 基于可见光下的中远距离人脸识别算法 人脸识别智能监控平台 对多个摄像头监控范围内的多个人脸同时进行检测 跟踪和识别 实时对人员身份进行确认 一旦发现黑名单人员 自动报警 实现24小时的非
  • Python沙雕故事生成器

    Python故事生成器 本文章小编来给大家分享使用Python制作一个故事生成器 仅供娱乐 一 知识归纳 StringVar 控件变量 python中在使用界面编程时 用于跟踪数值不断发生变化的变量 确保数值的变更可以随时在根窗口上面显示出
  • YOLO3 -- 介绍

    YOLO介绍 YOLO官网 YOLO You Only Look Once 是目标检测模型 目标检测是计算机视觉中比较简单的任务 用来在一张图片中找到某些特定的物体 目标检测不仅要求我们识别这些物体的种类 同时要求我们标出这些物体的位置 Y
  • 【深度学习系列】用Tensorflow进行图像分类

    上个月发布了四篇文章 主要讲了深度学习中的 hello world mnist图像识别 以及卷积神经网络的原理详解 包括基本原理 自己手写CNN和paddlepaddle的源码解析 这篇主要跟大家讲讲如何用PaddlePaddle和Tens
  • eaxyx界面学习

    1 easyX的原理 基于Windows图形编程 将Windows下的复杂程序过程进行封装 仅给用户提供一个简单熟悉的接口 用户对于图形库中函数的调用 最终都会由Windows底层的API实现 在官网搜索eaxyx下载点击安装即可 接着引用
  • 恒合仓库 - 商品管理模块、上传照片、添加采购单、添加出库单、商品分类

    商品管理模块 文章目录 商品管理模块 一 分页查询商品 1 1 实体类 1 1 1 Store 仓库 1 1 2 Brand 品牌 1 1 3 ProductType 商品分类 1 1 4 Supply 供应商 1 1 5 Place 产地
  • Linux网络连接出现问题

    报错截图 1 先查看NetworkManager是否启动 查看NetworkManager是否启动 systemctl status NetworkManager 在Linux系统中 可以通过以下命令启动NetworkManager服务 s
  • 小程序项目时间选择器用法

    项目需求是要实现这种形式 但是相信大家都试了各种插件 都不太合适 uView框架也不能满足自己的需要 推荐使用 uview ui plus 基本上小程序遇到的单选多选 日期 省市区 都可以完美的实现 可以通过插件市场安装使用 但是要实现ui
  • matplotlib画动态三维图

    从txt文本中读取数据并画动态三维点图 程序中实现动态三维图绘制 添加图标题 坐标轴标题 坐标轴数值范围 两种绘图模式 一种动态画图 所有点均保留 另一种每次仅显示一个点 三维坐标轴设置区间 需要通过Axes3D创建ax 否则其他方式无法设
  • Openface的安装和使用

    openface的安装与使用 环境 我的电脑是笔记本电脑 win10系统 用的是pycharm和annaconda 一 首先下载openface安装包 并且安装 1 下载地址 https codeload github com cmusat

随机推荐