003 静态代理
文章目录
- StudentServiceImpl
- StudentService.java
- StudentServiceProxy.java
- StudentServiceProxy1.java
- StudentServiceProxyTest.java
StudentServiceImpl
package com.aistart.service.impl;import com.aistart.mapper.StudentMapper;
import com.aistart.pojo.Student;
import com.aistart.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*注解写在实现类中*//*被代理的类,外部不能直接访问,而是让代理访问,目标类*/
public class StudentServiceImpl implements StudentService {@Overridepublic boolean addStu() {/*理论上,这里有个日志*/System.out.println("service调用执行,增加另一个学生");/*理论上,这里有个日志*/return false;}@Overridepublic boolean delStu() {System.out.println("service调用执行,删除另一个学生");return false;}
}
StudentService.java
package com.aistart.service;import com.aistart.pojo.Student;public interface StudentService {boolean addStu();boolean delStu();
}
StudentServiceProxy.java
package com.aistart.proxy;import com.aistart.logger.Logger;
import com.aistart.pojo.Student;
import com.aistart.service.StudentService;/*** 代理类,里面的函数理应与目标类(被代理类,核心类)一致*/
public class StudentServiceProxy implements StudentService {/*目标类*/private StudentService target;/*增强类*/private Logger logger;public StudentServiceProxy(StudentService target, Logger logger) {this.target = target;this.logger = logger;}@Overridepublic boolean addStu() {/*击打日志*/logger.LogInfoBefore();boolean b = target.addStu();//通过当前代理类访问目标类的logger.LogInfoAfter();return false;}@Overridepublic boolean delStu() {logger.LogInfoBefore();boolean b = target.delStu();logger.LogInfoAfter();return false;}
}
StudentServiceProxy1.java
package com.aistart.proxy;import com.aistart.logger.Logger;
import com.aistart.service.StudentService;
import com.aistart.service.impl.StudentServiceImpl;/*** 代理类,里面的函数理应与目标类(被代理类,核心类)一致*/
public class StudentServiceProxy1 extends StudentServiceImpl {/*目标类*/private StudentService target;/*增强类*/private Logger logger;public StudentServiceProxy1(StudentService target, Logger logger) {this.target = target;this.logger = logger;}@Overridepublic boolean addStu() {/*击打日志*/logger.LogInfoBefore();boolean b = target.addStu();//通过当前代理类访问目标类的logger.LogInfoAfter();return false;}@Overridepublic boolean delStu() {logger.LogInfoBefore();boolean b = target.delStu();logger.LogInfoAfter();return false;}
}
StudentServiceProxyTest.java
package com.aistart.proxy;import com.aistart.logger.Logger;
import com.aistart.service.StudentService;
import com.aistart.service.impl.StudentServiceImpl;
import org.junit.Test;import java.lang.reflect.Proxy;import static org.junit.Assert.*;public class StudentServiceProxyTest {@Testpublic void addStu() {/*去测试,也就是直接访问,代理对象而不是访问目标*//*获取当前的目标对象*/StudentServiceImpl target = new StudentServiceImpl();/*获取增强的类*/Logger logger = new Logger();StudentService studentServiceProxy = new StudentServiceProxy(target, logger);studentServiceProxy.addStu();}}相关文章:
003 静态代理
文章目录 StudentServiceImplStudentService.javaStudentServiceProxy.javaStudentServiceProxy1.javaStudentServiceProxyTest.java StudentServiceImpl package com.aistart.service.impl;import com.aistart.mapper.StudentMapper; import com.aistart.pojo.Student; import…...
基于JAX的二阶优化方法的实践
使用协作分支上的算法 git clone https://github.com/linjing-lab/jax.git cd jax git checkout linjing-lab cd examples在命令行预览方法 牛顿方法: cat newton_method.py拟牛顿法: cat bfgs_method.py在命令行运行程序 python newton_method.pyp…...
【计算机考研】408算法大题怎么练?
先说结论:基础阶段学好各个数据结构与,重点是数组、链表、树、图。然后强化阶段突破算法提 在基础阶段,并不需要过于专门地练习算法。相反,基础阶段的重点应该放在对各种数据结构原理的深入理解上。在我个人的经验中,…...
输入框验证数字类型
校验大于0的数,且小数点后最多为八位小数 let k /^(?!0(\.0)?$)\d(\.\d{1,8})?$/; console.log(k.test(0.00000001)); // true console.log(k.test(0.00000000)); // false console.log(k.test(0.12)); // true console.log(k.test(12.12)); // true输入0-1的数字…...
LeetCode 377——组合总和 Ⅳ
阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题一看应该就是需要用到动态规划算法,假设我们以 f[d]表示总和为 d 的元素组合的个数,首先,我们遍历 nums 数组, 如果有 nums[i] < target,那么组…...
ubuntu同步网络时间
安装ntpdate sudo apt-get update sudo apt-get install ntpdate设置系统时间与网络时间同步 sudo ntpdate cn.pool.ntp.org设置时区亚洲上海 sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime设置时间为24小时制 echo "LC_TIMEen_DK.UTF-8" >>/…...
Flink学习(四)-数据管道 ETL
一、状态转换 map() 只适用于一对一的转换,即对每个进入算子的流元素,map() 将仅输出一个转换后的元素。 flatmap() 可以输出任意数量的元素,也可以一个都不发。 二、Keyed Streams keyBy() 相当于 sql 中的 group by,通过…...
Python可视化之Matplotlib
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1、解决坐标轴刻度负号乱码2、解决中文乱码问题3、图形展现形式 一、图形绘制1.折线图plot2.散点图plot&scatter3.柱状图plt.bar&条形图plt.barh4.直方…...
ChatGPT全方位解析:如何培养 AI 智能对话技能?
简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达的越清晰,给到的信息越多,那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理,如果想要C…...
[C++/Linux] UDP编程
一. UDP函数 UDP(用户数据报协议,User Datagram Protocol)是一种无连接的网络协议,用于在互联网上交换数据。它允许应用程序发送数据报给另一端的应用程序,但不保证数据报能成功到达,也就是说,它…...
深入探索Linux的lsof命令
在Linux系统中,了解哪些文件被哪些进程打开对于系统管理和问题诊断是极其重要的。这正是lsof命令,即List Open Files,发挥其强大功能的场景。本文旨在详细介绍lsof的起源、底层原理、参数意义,常见用法,并详解其返回结…...
flowable 想改变正在运行的任务,实例版本为最新,需要改哪些表
在Flowable中,要改变正在运行的任务,你需要更新相关的流程定义,具体来说,可能涉及到以下几张表: ACT_RU_TASK(运行时任务):这张表包含了当前正在运行的任务信息。你可能需要更新该表…...
统计各位数字都不同的数字个数 II
3032. 统计各位数字都不同的数字个数 II 给你两个 正整数 a 和 b ,返回 闭区间 [a, b] 内各位数字都不同的数字个数。 示例 1: 输入:a 1, b 20 输出:19 解释:除 11 以外,区间 [1, 20] 内的所有数字的各…...
Taro框架中的H5 模板基本搭建
1.H5 模板框架的搭建 一个h5 的基本框架的搭建 基础template 阿乐/H5 Taro 的基础模板...
gitea详细介绍
Gitea 是一个轻量级、易于安装的 Git 服务,提供了类似于 GitHub 的功能,如代码托管、问题追踪、团队合作等。它使用 Go 语言开发,可以在自己的服务器上进行部署,从而实现自托管的 Git 服务。Gitea 具有用户友好的界面,…...
应用性能分析系统SkyWalking的安装及使用详解
1. 前言 本文全面介绍了Skywalking的功能特点、安装步骤以及使用方法。首先,文章详细阐述了Skywalking作为一款开源的应用性能管理系统(APM)的核心功能,包括分布式追踪、服务网格观测分析、度量聚合和可视化一体化等。接着,文章提供了Skywalking的详细安装指南,包括环境…...
服务器远程桌面连接不上怎么办?
随着互联网的发展和远程办公的兴起,服务器远程桌面连接成为了许多企业和个人不可或缺的工具。偶尔我们可能会碰到服务器远程桌面连接不上的情况,这时候我们需要找到解决办法,确保高效地远程访问服务器。 天联组网——突破远程连接障碍 在我们…...
C++之STL的algorithm(8)之适配器(bind等)整理
C之STL的algorithm(8)之适配器(bind等)整理 注:整理一些突然学到的C知识,随时mark一下 例如:忘记的关键字用法,新关键字,新数据结构 C 的适配器整理 C之STL的algorithm&…...
部分国企笔试总结
2024.3.30相城区某国企笔试 客观题,30分 类似考公行测题(大部分)部分计算机专业基础知识(仅几题) 主观题,70分 网络安全类一道C编程题:用户输入圆半径r,程序计算面积和周长并输出…...
《QT实用小工具·二十二》多种样式导航按钮控件
1、概述 源码放在文章末尾 该项目实现了多种样式的导航按钮控件 可设置文字的左侧、右侧、顶部、底部间隔。 可设置文字对齐方式。 可设置显示倒三角、倒三角边长、倒三角位置、倒三角颜色。 可设置显示图标、图标间隔、图标尺寸、正常状态图标、悬停状态图标、选中状态图标…...
从内存视角拆解float和double:用C语言和调试器带你‘看见’IEEE754的二进制世界
从内存视角拆解float和double:用C语言和调试器带你‘看见’IEEE754的二进制世界 在计算机科学中,浮点数的表示和处理是一个既基础又关键的话题。对于从事系统编程、性能优化或逆向工程的开发者来说,理解浮点数在内存中的实际存储形式不仅能帮…...
GEO优化实操框架:GEO优化的正确姿势是“带着答案去找客户”
如果你是B2B企业的老板或市场负责人,你一定听过这句话: “我们网上曝光是不少,但来的询盘都不对——问价格的比问方案的还多,还有不少是学生做调研的。” 这不是你一个人遇到的问题。这是传统SEO和竞价广告的天然缺陷——你只能“…...
YimMenu终极配置指南:从零开始掌握GTA V高级菜单工具
YimMenu终极配置指南:从零开始掌握GTA V高级菜单工具 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMe…...
如何快速提升游戏帧率:OpenSpeedy游戏加速优化终极指南
如何快速提升游戏帧率:OpenSpeedy游戏加速优化终极指南 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 你是否厌倦了游戏卡顿和掉帧?OpenSpeedy是一款…...
别再点‘忽略’了!开机弹出Visual C++ Runtime Library错误的终极排查指南(附Adobe软件关联排查)
Visual C Runtime Library错误:从崩溃到根治的全链路解决方案 每次开机时那个刺眼的Visual C Runtime Library错误弹窗,就像一位不请自来的访客,固执地打断你的工作节奏。对于依赖Adobe Creative Cloud或达芬奇等创意工具的专业人士来说&…...
构建动态技能图谱:从数据模型到自动化可视化的完整实践
1. 项目概述:一个技能图谱的诞生最近在GitHub上看到一个挺有意思的项目,叫dortort/skills。乍一看,这只是一个个人仓库,但点进去你会发现,它远不止是一个简单的代码集合。它更像是一张动态的、可视化的个人技能地图&am…...
AI驱动命令行工具:用自然语言自动化开发任务
1. 项目概述:一个为开发者“下厨”的AI助手如果你是一名开发者,每天在终端里敲打命令,构建、部署、调试,那么你肯定对重复性的命令行操作感到厌倦。比如,每次启动一个新项目,都要手动创建目录结构、初始化G…...
技术解构:逆向工程视角下的百度网盘下载链接解析机制
技术解构:逆向工程视角下的百度网盘下载链接解析机制 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 想象一下,当你收到朋友分享的百度网盘链接时&…...
天学网口碑好不好?2026年最新用户实测反馈给你答案
作为深耕教育数字化落地领域5年的从业者,最近后台收到不少公立校电教组老师、学生家长的提问:主打AI英语教学的天学网口碑到底怎么样?刚好我们团队刚做完2026年第一季度的英语教育数字化工具落地效果调研,结合一手实测数据给大家客…...
基于树莓派与QT Py的本地化物联网红外遥控器DIY指南
1. 项目概述与核心价值想没想过,把家里那堆遥控器——电视的、机顶盒的、空调的、音响的——统统集成到一个你手机能打开的网页里?而且这个控制中心完全在你家局域网里运行,不依赖任何云服务,不用担心厂商倒闭后设备变砖。今天分享…...
