当前位置: 首页 > news >正文

JDK动态代理(tedu)(内含源代码)

JDK动态代理(tedu)(内含源代码)

源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87546187

目录

  • JDK动态代理(tedu)(内含源代码)
  • `源代码下载链接地址:`[https://download.csdn.net/download/weixin_46411355/87546187](https://download.csdn.net/download/weixin_46411355/87546187)
    • 一、创建一个SpringBoot项目
    • 二、配置类
    • 三、service层
      • 3.1 接口类
      • 3.2 实现类
    • 四、JDK动态代理,根据目标类获取代理类的方法
    • 五、测试类
    • 六、测试结果
    • 问题:为什么 System.out.println(proxy);会打印事务开始和事务提交?

一、创建一个SpringBoot项目

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、配置类

SpringConfig

package com.tedu.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@ComponentScan("com.tedu")
@Configuration
public class SpringConfig {}

三、service层

3.1 接口类

UserService

package com.tedu.service;public interface UserService {void addUser();void deleteUser();
}

3.2 实现类

package com.tedu.service;import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService{@Overridepublic void addUser() {System.out.println("完成用户新增");}@Overridepublic void deleteUser() {System.out.println("完成用户删除");}
}

四、JDK动态代理,根据目标类获取代理类的方法

package com.tedu.proxy;import com.sun.corba.se.spi.ior.ObjectKey;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class JDKProxy {public static Object getProxy(Object target){//1.获取类加载器ClassLoader classLoader = target.getClass().getClassLoader();//2.获取接口Class<?>[] interfaces = target.getClass().getInterfaces();//通过代理的类新创建一个代理的对象return Proxy.newProxyInstance(classLoader, interfaces, getInvocationHandler(target));}//代理对象执行方法是调用public static InvocationHandler getInvocationHandler(Object target){//这些代码都是写死的return new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("======================事务开始=============================");//执行目标(真实对象的方法)Object result = method.invoke(target, args);System.out.println("==========================事务提交============================");return result;}};}}

五、测试类

package com.tedu.test;import com.tedu.config.SpringConfig;
import com.tedu.proxy.JDKProxy;
import com.tedu.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class SpringTx {public static void main(String[] args) {ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);UserService userService = applicationContext.getBean(UserService.class);System.out.println(userService.getClass());UserService proxy = (UserService)JDKProxy.getProxy(userService);System.out.println(proxy.getClass());System.out.println(proxy);System.out.println(proxy.toString());//基于代理对象,执行业务操作 实现方法扩展proxy.addUser();proxy.deleteUser();}
}

六、测试结果

在这里插入图片描述

问题:为什么 System.out.println(proxy);会打印事务开始和事务提交?

因为System.out.println(proxy);默认等价于System.out.println(proxy.toString());虽然没有调用业务方法,但还是调用了目标对象的toString()方法,所以会出现事务开始和事务提交。

相关文章:

JDK动态代理(tedu)(内含源代码)

JDK动态代理&#xff08;tedu&#xff09;&#xff08;内含源代码&#xff09; 源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87546187 目录JDK动态代理&#xff08;tedu&#xff09;&#xff08;内含源代码&#xff09;源代码下载链接…...

【数据结构】二叉搜索树

1、什么是二叉搜索树二叉搜索树又称为二叉排序树&#xff0c;二叉也就说明它跟二叉树一样最多只能有两个度&#xff0c;它可以是棵空树&#xff0c;也可以不是棵空树&#xff0c;当它不是棵空树的时候需要具备以下的性质&#xff1a;若它的左树不为空&#xff0c;那么它的左树上…...

抢跑数字中国建设,青岛市统计系统考察团赴实在智能调研统计数字员工

当前&#xff0c;数据要素价值不断显现&#xff0c;数字经济正引领着政企业加快数字技术的应用&#xff0c;融通创新工作机制&#xff0c;推进高质量转型。近日&#xff0c;中共中央、国务院印发了《数字中国建设整体布局规划》。《规划》指出&#xff0c;到2025年&#xff0c;…...

深浅拷贝——利用模拟实现basic_string深入理解

深浅拷贝——利用模拟实现basic_string深入理解 一、深浅拷贝的基本概念 深拷贝和浅拷贝都是指在对象复制时&#xff0c;复制对象的内存空间的方式。 1.1 深浅拷贝的不同之处 浅拷贝是指将一个对象的所有成员变量都直接拷贝给另一个对象&#xff0c;包括指针成员变量&#…...

大模型分布式系统

背景&#xff1a;模型越来越大&#xff0c;训练复杂度越来越高&#xff0c;需要训练的时间也是越来越长。那么我们该如何在现有的硬件基础上对模型做训练呢。模型规模的扩大&#xff0c;对硬件&#xff08;算力、内存&#xff09;的发展提出要求。然而&#xff0c;因为 内存墙 …...

【时序】时序预测任务模型选择如何选择?

时间序列是什么时间序列是一种特殊类型的数据集,其中一个或多个变量随着时间的推移被测量。 在时间序列中,观测值是随着时间的推移而测量的。你的数据集中的每个数据点都对应着一个时间点。这意味着你的数据集的不同数据点之间存在着一种关系。这对可以应用于时间序列数据集的…...

重温数据结构与算法之深度优先搜索

文章目录前言一、实现1.1 递归实现1.2 栈实现1.3 两者区别二、LeetCode 实战2.1 二叉树的前序遍历2.2 岛屿数量2.3 统计封闭岛屿的数目2.4 从先序遍历还原二叉树参考前言 深度优先搜索&#xff08;Depth First Search&#xff0c;DFS&#xff09;是一种遍历或搜索树或图数据结…...

STM32F103驱动LD3320语音识别模块

STM32F103驱动LD3320语音识别模块LD3320语音识别模块简介模块引脚定义STM32F103ZET6开发板与模块接线测试代码实验结果LD3320语音识别模块简介 基于 LD3320&#xff0c;可以在任何的电子产品中&#xff0c;甚至包括最简单的 51 作为主控芯片的系统中&#xff0c;轻松实现语音识…...

2023 最新可用Google镜像地址 长期更新

Google镜像说明 由于种种原因&#xff0c;国家还未开放Google搜索的使用。虽然可以通过某些技术手段实现访问&#xff0c;但是还是有一些同学需要借助Google搜索镜像才可以达到访问的目的&#xff1b;笔者特意搜集了一些2022年最新的Google搜索镜像供有需求的童鞋使用&#xf…...

MATLAB算法实战应用案例精讲-【优化算法】蝗虫优化算法(GOA)及其算法变种(附matlab和python代码实现)

目录 前言 算法原理 算法思想 GOA 算法的数学模型 迭代模型 算法流程...

数据结构与算法 顺序表、链表总结

文章目录顺序表1、顺序表的基本概念链表1 简介链表概念链表特点链表与数组的对比2 链表的类型分类链表循环单向链表1 简介概念2 数据存储和实现数据存储数据实现3 操作基本操作实现线性表&#xff08;List&#xff09;&#xff1a;零个或多个数据元素的有限序列。在较复杂的线性…...

Nginx集群搭建-三台

1.使用root用户登录Linux服务器 2.创建用户 输入 adduser test 后回车 #test 为创建的用户 3.为创建的用户设置密码 输入 passwd test 后回车 输入两次密码 4.出现 passwd&#xff1a;所有的身份验证令牌已经成功更新。证明Linux新用户和密码创建成功 5.使用新用户test登录Linu…...

【算法】图的存储和遍历

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;或许会很慢&#xff0c;但是不可以停下&#x1f43e; 文章目录1. 图的存储1.1 邻接矩阵1.2 邻接表2. 图的遍历2.1 dfs 遍历2.2 bfs 遍历1. 图的存储 引入 一般来说&#xff0c;树和图有两种存储方式&#…...

文件如何批量复制保存在多个文件夹中

在日常工作中经常需要整理文件&#xff0c;比如像文件或文件夹重命名或文件批量归类&#xff0c;文件批量复制到指定某个或多个文件来中保存备份起来。一般都家最常用方便是手动一个一个去重命名或复制到粘贴到某个文件夹中保存&#xff0c;有没有简单好用的办法呢&#xff0c;…...

16N60-ASEMI高压MOS管16N60

编辑-Z 16N60在TO-220封装里的静态漏极源导通电阻&#xff08;RDS(ON)&#xff09;为0.2Ω&#xff0c;是一款N沟道高压MOS管。16N60的最大脉冲正向电流ISM为48A&#xff0c;零栅极电压漏极电流(IDSS)为10uA&#xff0c;其工作时耐温度范围为-55~150摄氏度。16N60功耗&#xf…...

Open3D 多个点云配准(C++版本)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 多路配准(多个点云配准)是指在全局空间中对齐多个几何块的过程。输入的数据可以是点云或深度图像 P i P_i P...

java实现Hbase 增删改查

目录 一、新建一个maven工程 二、代码实现 2.1、配置hbase信息&#xff0c;连接hbase数据库 2.2、创建命名空间 2.3、创建表 2.4、删除表&#xff0c;删除之前要设置为禁用状态 2.5、添加数据 2.6、获取命令表空间 / tables列表 2.7、get方法查看表的内容 2.8、scan方法…...

1109. 航班预订统计 差分数组

1109. 航班预订统计 差分数组技巧适⽤于频繁对数组区间进⾏增减的场景 1.由数组a生成差分数组b{b[0]0,i0(或者b[0]a[0],i0)b[i]a[i]−a[i−1],i>01.由数组a生成差分数组b\left\{\begin{array}{l}b[0]0,i0(或者b[0]a[0],i0)\\ b[i]a[i]-a[i-1],i>0\end{array}\right. 1.由…...

图床搭建,使用typora上传

1. 准备gitee作为图床的仓库 新建仓库 准备仓库的私人令牌&#xff0c;后面配合使用 点击个人设置——》私人令牌 注意私人令牌&#xff0c;复制保存好&#xff0c;后面不能再看了 2. 准备PicGO&#xff0c;并进行相关配置 PicGo官方下载链接 下载安装好node.js,下载网址 安…...

低代码开发的优势是什么?

低代码开发的优势是什么?低代码开发这个概念这两年来经常出现在人们的视野中&#xff0c;市场对于低代码的需求也越来越庞大。 Gartner预测&#xff0c;到2025年&#xff0c;75%的大型企业将使用至少四种低代码/无代码开发工具&#xff0c;用于IT应用开发和公民开发计划。 可…...

Ip2Resion线上部署报数据越界及错误处理

上篇在本地测试调用Ip2Resigon解析行政区划 Ip2Region的Java本地实现运行正常&#xff0c;但部署到测试环境&#xff0c;抛出数组越界&#xff08;java.lang.ArrayIndexOutOfBoundsException&#xff09;异常。 环境信息 ip2Resion是2.7版本&#xff0c;对应文件后缀为 xdb。 …...

致敬我的C++启蒙老师,跟着他学计算机编程就对了 (文末赠书5本)

致敬我的C启蒙老师&#xff0c;跟着他学计算机编程就对了 摘要 讲述了一个故事&#xff0c;介绍了一位良师&#xff0c;一段因C而续写的回忆&#xff0c;希望对各位看官有所帮助和启发。 文章目录1 写在前面2 我的C启蒙老师3 谈谈老师给我的启发4 友情推荐5 文末福利1 写在前面…...

CSS中的伪元素和伪类

一直被伪类和伪元素所迷惑&#xff0c;以为是同一个属性名称&#xff0c;根据CSS动画&#xff0c;索性开始研究a:hover:after&#xff0c;a.hover:after的用法。 伪元素 是HTML中并不存在的元素&#xff0c;用于将特殊的效果添加到某些选择器。 对伪元素的描述 伪元素有两…...

逻辑优化基础-rewrite

简介 逻辑综合中的rewrite算法是一种常见的优化算法&#xff0c;其主要作用是通过对逻辑电路的布尔函数进行等效变换&#xff0c;从而达到优化电路面积、时序和功耗等目的。本文将对rewrite算法进行详细介绍&#xff0c;并附带Verilog代码示例。 一、算法原理 rewrite算法的…...

案例27-单表从9个更新语句调整为2个

目录 一&#xff1a;背景介绍 二&#xff1a;思路&方案 三&#xff1a;过程 1.项目结构 2.准备一个普通的maven项目&#xff0c;部署好mysql数据库 3.在项目中引入pom依赖 5.编写MyBitis配置文件 6.编写Mysql配置类 7.编写通用Update语句 8.项目启动类 四&#xff1a;总…...

Wordpress paid-memberships-pro plugins CVE-2023-23488未授权SQLi漏洞分析

目录 1.漏洞概述 2.漏洞等级 3.调试环境 4.漏洞代码 5 POC 1.漏洞概述 WordPress插件paid-memberships-pro版本<2.9.8中,容易受到REST路由“/pmpro/v1/order”的“code”参数中未验证的SQL注入漏洞的影响。攻击者可进行SQLi盲注,从而获取数据库权限。 CVE:...

【JavaWeb篇】JSTL相关知识点总结

目录 为什么会有JSTL&#xff1f; 什么是JSTL&#xff1f; 如何理解JSTL标准标签库呢&#xff1f; 如何使用JSTL&#xff1f; 第一步&#xff1a;引入JSTL标签库对应的jar包。 第二步&#xff1a;在JSP中引入要使用标签库。&#xff08;使用taglib指令引入标签库。&#x…...

【蓝桥杯刷题】坑爹的负进制转换

【蓝桥杯刷题】——坑爹的负进制转换&#x1f60e;&#x1f60e;&#x1f60e; 目录 &#x1f4a1;前言&#x1f31e;&#xff1a; &#x1f49b;坑爹的负进制转换题目&#x1f49b; &#x1f4aa; 解题思路的分享&#x1f4aa; &#x1f60a;题目源码的分享&#x1f6…...

react+antdpro+ts实现企业级项目二:Strapi及认证登陆模块

在上一章节中&#xff0c;我们已经成功创建并登陆了系统&#xff0c;现在需要为系统添加权限和登录认证&#xff0c;以提高系统的安全性、数据保护、个性化服务和用户体验。此外&#xff0c;添加权限和登录认证还可以方便管理员进行用户和授权管理。为了快速开发前端&#xff0…...

Android ANR trace日志如何导出

什么是ANR &#xff1f;上网搜索&#xff0c;一搜一大片&#xff0c;我就说个很容易识别的字眼&#xff0c;XXXAPP无响应 ANR trace日志如何导出&#xff1f;使用ADB命令&#xff1a; adb pull data/anr/trace.txt 你要存放的路径。查看ANR报错位置全局搜索你APP的包名&#x…...

阿里云网站建设合作/做推广怎么赚钱

2019独角兽企业重金招聘Python工程师标准>>> 1.Object类 wait&#xff08;空参的&#xff09;线程进入waiting状态&#xff08;有参的&#xff09;线程进入timed_waiting状态 notify notifyAll &#xff08;1&#xff09;notify public final native void notify();…...

哪个购物软件最便宜/长春seo网站排名

1 查看opencv版本 pkg-config opencv --modversion 2 cuda计算力&#xff1a; CUDA GPU | NVIDIA Developer OpenCV源码安装教程&#xff08;兼容CUDA&#xff09;_周先森爱吃素的博客-CSDN博客_opencv源码安装 修改cv_bridge配置文件&#xff0c;解决ROS与opencv版本冲突问…...

wordpress 选择服务器/如何做宣传推广效果最好

中国移动电商项目网盘地址&#xff1a;http://a41214.l50.yunpan.cn/lk/c3Sg6jjxnFg3r 密码 e214课程目录・ 拓薪教育-电商项目第1天环境搭建・ 拓薪教育-电商项目第2天品牌管理・ 拓薪教育-电商项目第3天商品模块数据库模型设计和商品查询・ 拓薪教育-电商项目第4天商品添加…...

http://设计家园.com/wordpress/培训考试/外包网络推广公司推广网站

这题的题意大概就是给你一个字符串"abcdecde"&#xff0c;找到最长的子字符串长度&#xff0c;里面所有的子母都不重复。本例子中最长的满足条件的子字符串就是"abcde"&#xff0c;所以应该返回的是5。这一题如果不用暴力解决的方法的话&#xff0c;我优先…...

网站开发后端是什么/如何网络营销

大数据给各个行业发展带来了新的机遇和挑战&#xff0c;烟草作为对国家财政税收贡献极大的传统行业&#xff0c;也开始探索大数据采集、分析和应用。从烟草行业的营销、物流、生产环节入手&#xff0c;利用大数据分析的报表工具为烟草企业经营决策提供支撑。 在整个行业链条中…...

自适应网站主要用什么做/谷歌搜索入口中文

以前也零零碎碎发过一些排序算法&#xff0c;但排版都不太好&#xff0c;这次重新整理一次&#xff0c;排序算法是数据结构的重要部分&#xff0c;面试必问&#xff0c;系统地学习很有必要&#xff01;时间、空间复杂度比较排序算法平均时间复杂度最差时间复杂度空间复杂度数据…...