代理模式

接口

public interface UserService {void selectAll();
}

实现类(需要增加业务)

public class UserServiceImpl implements UserService{@Overridepublic void selectAll() {System.out.println("查询");}
}

静态代理
代理类

public class UserProxy implements UserService {// 持有具体业务实现private UserService userService;public void setUserService(UserService userService) {this.userService = userService;}@Overridepublic void selectAll() {System.out.println("不改变原有代码,进行增强");// 执行原有逻辑userService.selectAll();}
}

测试

public static void main(String[] args) {UserProxy userProxy = new UserProxy();// 代理具体业务实现userProxy.setUserService(new UserServiceImpl());// 执行增强业务userProxy.selectAll();
}

动态代理
代理类

public class ProxyInvocationHandler implements InvocationHandler {// 持有具体业务实现private Object object;public void setUserService(Object object) {this.object= object;}public Object getProxy(){// 让代理类实现具体实现类(UserServiceImpl)的接口(UserService),并重写接口方法,返回代理对象return Proxy.newProxyInstance(this.getClass().getClassLoader(), object.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("这里进行增强");// 代理类执行接口方法时,执行具体实现重写的方法return method.invoke(object, args);}
}

测试

public static void main(String[] args) {ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler();// 持有具体实现proxyInvocationHandler.setObject(new UserServiceImpl());// 获取代理对象(已实现具体实现的接口并重写接口方法)UserService proxy = (UserService) proxyInvocationHandler.getProxy();// 执行增强业务proxy.selectAll();
}

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

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

相关文章

选择适合微服务的编程语言

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! 讨论编程语言就像是一场政治辩论。每个开发者都会过分捍卫他/她所使用的编程语言。然而,编程语言应该被看作是它们真…

Tofu目标识别跟踪模块

Tofu3 是多波段视频物体识别跟踪模块,支持可见光视频与红外视频的输入,支持激光补光变焦自适应控制,支持视频下的多类型物体检测、识别、跟踪等功能。 产品支持视频编码、设备管理、目标检测、深度学习识别、跟踪等功能,提供多机…

IPv6网络协议有什么用

IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议,号称可以为全世界的每一粒沙子编上一个地址。IPv6的使用,不仅…

一起看看StatusBarManagerService(三)

写在前面 StatusBarManagerService中API涉及systemui的多个模块;本篇主要介绍StatusBarManagerService中与通知栏相关的API和几个通用API。 因为我对系统UI了解的不全,其他API暂不整理,怕误人子弟。。 通知栏相关函数解析 1.展开通知栏 vo…

智慧灯杆技术应用分析

智慧灯杆是指在传统灯杆的基础上,通过集成多种先进技术实现城市智能化管理的灯杆。智慧灯杆技术应用的分析如下: 照明功能:智慧灯杆可以实现智能调光、时段控制等功能,根据不同的需求自动调节照明亮度,提高照明效果&am…

如何测试Nginx防盗链是否生效?

1、查看Nginx防盗链规则是否正确 打开Nginx的配置文件,找到防盗链规则。一般Nginx防盗链的规则内容大致如下: location ~* \.(jpg|jpeg|png|gif)$ {valid_referers none blocked example.com;if ($invalid_referer) {return 403;}} 上述配置会拦截所…

利用Pytorch预训练模型进行图像分类

Use Pre-trained models for Image Classification. # This post is rectified on the base of https://learnopencv.com/pytorch-for-beginners-image-classification-using-pre-trained-models/# And we have re-orginaized the code script.预训练模型(Pre-trained models)…

c++标识线程

c标识线程 线程ID类型为std::thread::id,它有两种方式获取。 直接通过std::thread对象的成员函数get_id()来获取。如果thread对象没有与任何执行线程相关联,get_id()将返回std::thread::id对象,它按照默认的构造方式生成,表示线程…

大型科技公司与初创公司:选择哪一个?

你有没有想过,特别是在你职业生涯的开始,选择什么类型的公司?它应该是一家像谷歌、亚马逊、Meta 这样的大型科技公司,还是为一家小型初创公司工作。在本文中,我们将讨论实际差异是什么,并帮助你选择最适合你…

『OPEN3D』1.8.3 多份点云配准

多份点云配准是将多份点云数据在全局空间中对齐的过程。通常,输入是一组数据(例如点云或RGBD图像){Pi}。输出是一组刚性变换{Ti},使得经过变换的点云在全局空间中对齐。 NNNNNathan 本专栏地址: https://blog.csdn.net/qq_41366026/category_12186023.html 此处是…

orcad(Cadence)常用库olb介绍

基础库: CAPSYM.OLB capsym 共35个零件,存放电源,地,输入输出口,标题栏等。DISCRETE.OLB 共872个零件,存放分立式元件,如电阻,电容,电感,开关,变…

DHCP—动态主机配置协议

动态主机配置协议DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是RFC 1541(已被RFC 2131取代)定义的标准协议,该协议允许服务器向客户端动态分配IP地址和配置信息。 DHCP协议支持C/S&#x…

pom配置文件重要标签探究

文章目录 dependencies标签dependencyManagement标签两者辨析repositories标签properties标签 dependencies标签 <dependencies>标签用于指定项目的依赖项列表。这些依赖项可以是应用程序代码所需的库&#xff0c;也可以是Spring Boot和其他第三方库。<dependencies&…

RocketMQ 总体概括

目录 概述RocketMQ 领域模型MQ 解决的问题电商平台案例初步设计引入中间件设计 MQ 选型结束 概述 官网地址 RocketMQ 领域模型 官方领域模型概述 下面图&#xff0c;是在自己理解的基础上&#xff0c;对官方的模型图添加了一些。 Topic&#xff1a;主题&#xff0c;可以理解…

打家劫舍Ⅱ java

题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的…

深入解析MySQL中内连接、外连接的区别及实践应用

​嗨&#xff0c;大家好&#xff0c;欢迎来到程序猿漠然公众号&#xff0c;我是漠然。在数据库查询中&#xff0c;连接是一种常用的操作&#xff0c;用于从两个或多个表中获取数据。本文将详细介绍MySQL中的内连接、外连接的概念、区别以及实践应用&#xff0c;帮助大家更好地理…

Java网络编程——基于UDP的数据报和套接字

java.net.ServerSocket与java.net.Socket建立在TCP的基础上。TCP是网络传输层的一种可靠的数据传输协议。如果数据在传输途中被丢失或损坏&#xff0c;那么TCP会保证再次发送数据&#xff1b;如果数据到达接收方的顺序被打乱&#xff0c;那么TCP会在接收方重新恢复数据的正确顺…

vscode报错Pylance client: couldn‘t create connection to server.

问题描述&#xff1a; 一打开vscode&#xff0c;右下角就弹报错&#xff0c;Pylance client: couldn’t create connection to server.&#xff0c;让我打开output&#xff0c;打开后似乎是在说连不上server 因为连不上server&#xff0c;所以我的python代码没法解析&#xff0…

2.4 C语言之运算符

2.4 C语言之运算符 一、算术运算符二、关系运算符三、逻辑运算符四、自增自减运算符五、按位运算符六、赋值运算符七、条件表达式八、运算符优先级与求值次序 一、算术运算符 二元算术运算符包括&#xff1a;(加)、-(减)、*(乘)、/(除)、%(取模) 整数除法会截断结果中的小数部…

扬声器(喇叭)

扬声器(喇叭) 电子元器件百科 文章目录 扬声器(喇叭)前言一、扬声器(喇叭)是什么二、扬声器(喇叭)的类别三、扬声器(喇叭)的应用场景四、扬声器(喇叭)的作用原理总结前言 扬声器广泛应用于音响系统、公共广播系统、汽车音响、电视、电脑和移动设备等各种电子设备…