Spring中静态代理设计模式

news2024/12/27 11:46:01

目录

一、为什么需要代理设计模式

二、代理设计模式

三、静态代理设计模式

3.1 存在的问题


一、为什么需要代理设计模式

在项目的开发过程中我们知道service层是整个项目中最重要的部分,在service中一般会有两个部分,一个是核心业务,一个是额外功能。那么问题来了,这个额外功能放在service层好不好呢?其实在service中有额外功能是不好的,是不利于代码的维护的。所以这里就有了代理设计模式

 这样的案例在生活中也是很常见的,就好比说租房中的中介公司就是一个代理(代理类),当有人需要租房的时候直接去找中介公司就可以了,通过中介公司也可以对接到房东签合同,这样就省去了房东自己去打广告的麻烦,所以代理设计模式是非常有必要的!

二、代理设计模式

通过上述的描述,我们发现代理设计模式就是通过一个代理类,为目标类增加额外的功能,这样做的目的就是利于目标类的维护。

1)代理开发的核心要素

由上述过程我们发现在代理类中,目标类的功能是需要有的(中介没有房东出租屋的信息怎么租房呢)同时还需要额外的功能(既然是中介公司那肯定要有广告信息)。有了这两个概念之后我们就能知道代理类和目标类应该实现同一个接口

2)编码实现

首先应该有一个service的接口类,这里直接创建一个UserService接口类

public interface UserService {
    void register();
    boolean login();
}

接下来再创建一个目标类UserServiceImpl实现这个接口(这个就好比是房东)

public class UserServiceImpl implements UserService{
    @Override
    public void register() {
        System.out.println("register核心功能正在执行");
    }
    @Override
    public boolean login() {
        return false;
    }
}

最后创建一个代理类UserServiceProxy,这个类既要有目标类的功能,也要有自己的额外功能(中介的广告)

public class UserServiceProxy implements UserService{
    // 需要有目标类的方法,所以这里需要有目标类
    UserServiceImpl user = new UserServiceImpl();
    @Override
    public void register() {
        // 添加额外功能,这里就不写复杂功能了,打印代替
        System.out.println("----这里是额外功能的添加----log");
        // 将目标类的方法实现
        user.register();
    }
    @Override
    public boolean login() {
        // 添加额外功能,这里就不写复杂功能了,打印代替
        System.out.println("----这里是额外功能的添加----log");
        return user.login();
    }
}

3)进行测试

此时就可以发现这里的目标类中的核心方法执行了,同时这里的额外功能也执行了,这时说明代理的过程已经成功了

public void test1() {
    UserService userService = new UserServiceProxy();
    userService.register();
    userService.login();
}

三、静态代理设计模式

上述的代理的过程称为静态代理模式:为每一个目标类手工编写一个代理类。

3.1 存在的问题

静态代理的过程中我们会发现其实存在一些问题,因为每一个目标类都需要手动编写一个代理类,那么在这个过程中如果代理类过多就会使得项目的管理难度上升。同时,在静态代理的过程中这些额外功能都是已经写死在代理类中了,后续想要修改这些额外功能就会变得非常的复杂!说了这么多,那有解决办法吗?有!那就是Spring提供的动态代理开发!

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

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

相关文章

DJYROS产品:基于DJYOS的国产自主割草机器人解决方案

基于都江堰泛计算操作系统的国产自主机器人操作系统即将发布…… 1、都江堰机器人操作系统命名:DJYROS 2、机器人算法:联合行业自主机器人厂家,构建机器人算法库。 3、机器人芯片:联合行业机器人AI芯片公司,构建专用…

电商API是何时?以什么姿态开启了它的时代?

说到API,非业内技术人士,大家似乎对它还是知之甚少。 但如果有关注这个领域,其实不难发现,国内一些所谓大厂已经在电商API接口方面做了不少动作,不论是对外宣称的API生态,还是相对低调的API市场&#xff0c…

冲刺学习-MySQL-基础

基础 数据类型 常见数据类型的属性 整型 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT 可选属性 M:表示显示宽度(从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性)UNSIGNED&#xff1…

hdlbits系列verilog解答(7458芯片)-10

文章目录 wire线网类型介绍一、问题描述二、verilog源码三、仿真结果 wire线网类型介绍 wire线网类型是verilog的一种数据类型,它是一种单向的物理连线。它可以是输入也可以是输出,它与reg寄存器数据类型不同,它不能存储数据,只能…

设计模式——七大原则详解

这里写目录标题 设计模式单一职责原则应用实例注意事项和细节 接口隔离原则应用实例 依赖倒转(倒置)原则基本介绍实例代码依赖关系传递的三种方式注意事项和细节 里氏替换原则基本介绍实例代码 开闭原则基本介绍实例代码 迪米特法则基本介绍实例代码注意…

【苍穹外卖 | 项目日记】第八天

前言: 昨天晚上跑完步回来宿舍都快停电了,就没写项目日记,今天补上 目录 前言: 今日完结任务: 今日收获: 引入百度地图接口: 引入spring task ,定时处理异常订单: …

ssm+vue的软考系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的软考系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&#xff…

【RNA structures】RNA-seq Part2: RNA转录的重构和前沿测序技术

文章目录 RNA转录重建1 先简单介绍一下测序相关技术2 Map to Genome Methods2.1 Step1 Mapping reads to the genome2.2 Step2 Deal with spliced reads2.3 Step 3 Resolve individual transcripts and their expression levels 3 Align-de-novo approaches3.1 Step 1: Generat…

你还不会DeBug?太low了吧

编程时调试是不可缺少的,Unity中用于调试的方法均在Debug类中。 浅试一下 新建一个物体和脚本,并把脚本挂载到物体上! using System.Collections; using System.Collections.Generic; using UnityEngine;public class DeBugTest : MonoBeh…

JavaSE入门---掌握面向对象三大特性:封装、继承和多态

文章目录 封装什么是封装?如何实现封装? 继承什么是继承?继承的语法父类成员访问子类访问父类的成员变量子类访问父类的成员方法 认识super关键字认识final关键字子类的构造方法super VS this在继承关系中各代码块的执行顺序是怎样的&#xf…

AAPCS:最新的ARM子程序调用规则

AAPCS是arm公司发布的ARM架构应用程序二进制(ABI)程序调用接口,该文档由多个版本,博主第一次ARM程序调用规则是在《ARM体系与结构编程》,但书中描述的是ATPCS,AAPCS是ATPCS的升级版。后面去ARM官网看到了AA…

冯诺依曼体结构 - 为什么要有操作系统

冯诺依曼体系结构 基础 概念认识 我们现在常见的 计算机,如 笔记本电脑,或者是不常见的 计算机,如服务器,大部分都遵循一个体系结构 -- 冯诺依曼体系结构。计算机的基本构成 就是由 冯诺依曼体系结构 来构成计算机的基本单元的。…

机械设备经营小程序商城的作用是什么

由于机械设备厂商品牌需要各地招商代理,因此在管理方面也需要工具进行高效管理。如今各个行业都在开展数字化转型解决行业所遇难题或通过线上销售解决传统三公里难题及品牌扩张难题、用户消费渠道少等难题,构建会员体系精细化管理,同时还需要…

轻松快速搭建一个本地的语音合成服务

前言 本文将介绍一个可以快速搭建本地语音合成的服务,模型和代码已全部提供,不需要联网运行。项目使用的是VITS模型结构,能够很轻松地启动服务。 安装环境 安装Pytorch。 # 安装CPU版本的Pytorch conda install pytorch torchvision torc…

【了解一下,Elastic Search的检索】

文章目录 **1.1.ES**1.1.1.elasticsearch的作用**1.1.2.ELK栈****2.索引库操作****2.1.mapping映射属性****2.2.索引库的CRUD** **3. 文档操作** **基于IDEA操作ES****索引操作****文档操作** DSL查询文档**1.1.DSL查询分类****1.2. 全文检索查询****1.3. 精准查询****1.4. 地理…

消息订阅与发布pubsub

消息订阅与发布 订阅消息:消息名发布消息:消息内容 A组件想使用C组件里面的东西,A需要数据,C是提供者。 在A组件里面订阅一个消息,假设订阅的消息名叫做Demo,指定回调函数叫test;C发布消息&…

ARM映像文件组成

引言 ARM编译器将各种源文件(汇编文件、C语言程序文件、C语言程序文件)编译生成ELF格式的目标文件(后缀为.o文件,以下将目标文件简称为.o文件),.o文件经过连接器,和C/C运行时库一起编译生成ELF格…

Kafka学习(最新版3.6.0)

文章目录 一、初识MQ1.1 什么是MQ1.2 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.3 技术对比1.4 MQ的两种模式 二、初识Kafka2.1 Kafka的使用场景2.2 Kafka基本概念2.3 Topic与Partition 三、Kafka基本使用3.1 部署前的准备3.2 启动kafka服务器3.3 Kafka核心概念之Topic3.4…

Qt扫盲-QPen 理论使用总结

QPen 理论使用总结 一、概述二、Pen Style 画笔风格三、Cap Style 帽风格四、Join Style 连接处样式 一、概述 QPen 是Qt绘图控件里面的一个重要的组件,和QColor 一样也是类似的一个属性类。这个类就是描述一个画笔具有的属性。 一个画笔 Pen 有style()&#xff0…

032-第三代软件开发-Popup弹窗

第三代软件开发-Popup弹窗 文章目录 第三代软件开发-Popup弹窗项目介绍Popup弹窗官方示例项目中的代码 之前写过一个Popup抄抄别人的dimvisible 和 Open 区别 与 Dialog有啥区别其他总结一下 关键字: Qt、 Qml、 Popup、 弹窗、 modal 项目介绍 欢迎来到我们的…