动态代理有几种方式,可以借助Mybatis-plus里面的检验动态类

动态代理有很多的分类;

1、JDK原生的动态代理;

2、Spring实现的基于cglib里面的工厂实例化对象;

3、基于原生的cglib造出来的对象

4、基于字节码的反编译:assistant

具体的实现类参考:


public final class ClassUtils {private static final char PACKAGE_SEPARATOR = '.';private static final List<String> PROXY_CLASS_NAMES = Arrays.asList("net.sf.cglib.proxy.Factory", 
"org.springframework.cglib.proxy.Factory","javassist.util.proxy.ProxyObject", "org.apache.ibatis.javassist.util.proxy.ProxyObject");private ClassUtils() {}public static boolean isProxy(Class<?> clazz) {if (clazz != null) {Class[] var1 = clazz.getInterfaces();int var2 = var1.length;for(int var3 = 0; var3 < var2; ++var3) {Class<?> cls = var1[var3];if (PROXY_CLASS_NAMES.contains(cls.getName())) {return true;}}}return false;}public static Class<?> getUserClass(Class<?> clazz) {return isProxy(clazz) ? clazz.getSuperclass() : clazz;}public static Class<?> getUserClass(Object object) {Assert.notNull(object, "Error: Instance must not be null", new Object[0]);return getUserClass(object.getClass());}public static <T> T newInstance(Class<T> clazz) {try {Constructor<T> constructor = clazz.getDeclaredConstructor();constructor.setAccessible(true);return constructor.newInstance();} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException | InstantiationException var2) {throw ExceptionUtils.mpe("实例化对象时出现错误,请尝试给 %s 添加无参的构造方法", var2, new Object[]{clazz.getName()});}}public static Class<?> toClassConfident(String name) {try {return Class.forName(name);} catch (ClassNotFoundException var2) {throw ExceptionUtils.mpe("找不到指定的class!请仅在明确确定会有 class 的时候,调用该方法", var2, new Object[0]);}}public static String getPackageName(Class<?> clazz) {Assert.notNull(clazz, "Class must not be null", new Object[0]);return getPackageName(clazz.getName());}public static String getPackageName(String fqClassName) {Assert.notNull(fqClassName, "Class name must not be null", new Object[0]);int lastDotIndex = fqClassName.lastIndexOf(46);return lastDotIndex != -1 ? fqClassName.substring(0, lastDotIndex) : "";}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/41581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】对String::intern()方法深入详解(JDK7及以上)

文章目录 1、什么是intern&#xff1f;2、经典例题解释例1例2例3 1、什么是intern&#xff1f; String::intern()是一个本地方法&#xff0c;它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串&#xff0c;则返回代表池中这个字符串的String对象的引用&#…

Java开源项目mall学习笔记(1)——项目初始化

一、学习声明与项目介绍 该笔记是记录学习开源项目mall过程的文档笔记&#xff0c;完全原创&#xff0c;转载请声明。同时也对开源项目的作者表示感谢&#xff01; mall: &#x1f525; mall项目是一套基于 SpringBoot Vue uni-app 实现的电商系统&#xff0c;包括前台商城项…

编译鸿蒙codelabs安装时报错

学习鸿蒙ArkTS时编译codelabs样例代码&#xff0c;发现编译完成报错。目前鸿蒙的资料比较少&#xff0c;且官方文档路径很深&#xff0c;遂记录下来&#xff0c;以资来者。 error: failed to start ability. Error while Launching activity修改module.json5中的exported为tru…

ArcGIS 利用cartogram插件制作变形地图

成果图 注&#xff1a;本图数据并不完全对&#xff0c;只做为测试用例 操作 首先需要下载一个插件cartogram 下载地址在这里 https://www.arcgis.com/home/item.html?idd348614c97264ae19b0311019a5f2276 下载完毕之后解压将Cartograms\HelpFiles下的所有文件复制到ArcGIS…

ffmpeg的使用

1、ffmpeg的安装 # 安装wget yum -y install wget # 安装ffmpeg压缩包 wget --no-check-certificate https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.0.3-64bit-static.tar.xz # 解压 tar -xJf ffmpeg-4.0.3-64bit-static.tar.xz # 进入目录 cd ffmpeg-4.0.3-64…

【Git】(二)分支

1、创建分支 已存在主分支master&#xff0c;现在需要创建v1.0的版本&#xff0c;一般直接在web页面操作。 v1.0分支&#xff0c;基线master&#xff0c;称为项目分支。 假如&#xff0c;v1.0项目存在两个项目成员sunriver2000和snow&#xff0c;一般还会再针对个人创建个人…

nodejs+vue+elementui学生档案信息管理系统_06bg9

利用计算机网络的便利&#xff0c;开发一套基于nodejs的大学生信息管理系统&#xff0c;将会给人们的生活带来更多的便利&#xff0c;而且在经济效益上&#xff0c;也会有很大的便利!这可以节省大量的时间和金钱。学生信息管理系统是学校不可缺少的一个环节&#xff0c;其内容直…

说一下什么是tcp的2MSL,为什么客户端在 TIME-WAIT 状态必须等待 2MSL 的时间?

1.TCP之2MSL 1.1 MSL MSL:Maximum Segment Lifetime报文段最大生存时间&#xff0c;它是任何报文段被丢弃前在网络内的最长时间 1.2为什么存在MSL TCP报文段以IP数据报在网络内传输&#xff0c;而IP数据报则有限制其生存时间的TTL字段&#xff0c;并且TTL的限制是基于跳数 1.3…

[高光谱]PyTorch使用CNN对高光谱图像进行分类

项目原地址&#xff1a; Hyperspectral-Classificationhttps://github.com/eecn/Hyperspectral-ClassificationDataLoader讲解&#xff1a; [高光谱]使用PyTorch的dataloader加载高光谱数据https://blog.csdn.net/weixin_37878740/article/details/130929358 一、模型加载 在…

使用JMeter创建数据库测试

好吧&#xff01;我一直觉得我不聪明&#xff0c;所以&#xff0c;我用最详细&#xff0c;最明了的方式来书写这个文章。我相信&#xff0c;我能明白的&#xff0c;你们一定能明白。 我的环境&#xff1a;MySQL&#xff1a;mysql-essential-5.1.51-win32 jdbc驱动&#xff1a;…

mysql 03.查询(重点)

先准备测试数据&#xff0c;代码如下&#xff1a; -- 创建数据库 DROP DATABASE IF EXISTS mydb; CREATE DATABASE mydb; USE mydb;-- 创建student表 CREATE TABLE student (sid CHAR(6),sname VARCHAR(50),age INT,gender VARCHAR(50) DEFAULT male );-- 向student表插入数据…

PHP 公交公司充电桩管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 公交公司充电桩管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码下载 https://download.csdn.net/download/qq_41221322/88220946 论文下…

【面试问题】当前系统查询接口需要去另外2个系统库中实时查询返回结果拼接优化思路

文章目录 场景描述优化思路分享资源 场景描述 接口需要从系统1查询数据&#xff0c;查出的每条数据需要从另一个系统2中再去查询某些字段&#xff0c; 比如&#xff1a;从系统1中查出100条数据&#xff0c;每条数据需要去系统2中再去查询出行数据&#xff0c;可能系统1一条数…

socks5 保障网络安全与爬虫需求的完美融合

Socks5代理&#xff1a;跨足网络安全和爬虫领域的全能选手 Socks5代理作为一种通用的网络协议&#xff0c;为多种应用场景提供了强大的代理能力。它不仅支持TCP和UDP的数据传输&#xff0c;还具备更高级的安全特性&#xff0c;如用户身份验证和加密通信。在网络安全中&#xf…

苹果手机批量删除联系人的2个方法,请查收!

【想要清理通讯录里的“僵尸号”&#xff0c;但是突然发现手机不能批量删除。一个一个删除太麻烦了&#xff0c;有什么办法可以一次性多删几个人吗&#xff1f;】 小编想问问果粉们平时都是怎么删除联系人的&#xff1f;特别是要删除多个联系人的时候&#xff0c;大家还是选择…

matlab保存图片

仅作为记录&#xff0c;大佬请跳过。 文章目录 用界面中的“另存为”用saveas 用界面中的“另存为” 即可。 参考 感谢大佬博主文章&#xff1a;传送门 用saveas 必须在编辑器中的plot之后用saveas&#xff08;也就是不能在命令行中单独使用——比如在编辑器中plot&#xf…

神经网络基础-神经网络补充概念-46-指数加权平均的偏差修正

由来 指数加权平均&#xff08;Exponential Moving Average&#xff0c;EMA&#xff09;在初始时可能会受到偏差的影响&#xff0c;特别是在数据量较小时&#xff0c;EMA的值可能会与实际数据有较大的偏差。为了修正这种偏差&#xff0c;可以使用偏差修正方法&#xff0c;通常…

基于平台的城市排水泵站管理系统设计

安科瑞 耿敏花 近年来我国城市内涝灾害频发&#xff0c;造成人员伤亡以及经济损失严重&#xff0c;严重威胁着城市的安全。数据显示&#xff0c;2015-2018年我国平均每年受淹或发生内涝城市的数量约占我国城市数量的1/5&#xff1b;人民生命财产也损失严重&#xff0c;据统计&a…

基于YOLOv5n/s/m不同参数量级模型开发构建茶叶嫩芽检测识别模型,使用pruning剪枝技术来对模型进行轻量化处理,探索不同剪枝水平下模型性能影响【续】

这里主要是前一篇博文的后续内容&#xff0c;简单回顾一下&#xff1a;本文选取了n/s/m三款不同量级的模型来依次构建训练模型&#xff0c;所有的参数保持同样的设置&#xff0c;之后探索在不同剪枝处理操作下的性能影响。 在上一篇博文中保持30的剪枝程度得到的效果还是比较理…

C++ 学习系列3 -- 函数压栈与出栈

在C中&#xff0c;函数压栈&#xff08;函数调用&#xff09;和出栈&#xff08;函数返回&#xff09;是函数调用过程中的两个关键步骤。下面将逐步解释这两个过程&#xff1a; 一 函数压栈与出栈过程简介 函数压栈&#xff08;函数调用&#xff09;的过程如下&#xff1a; …