Spring中静态代理设计模式

目录

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

二、代理设计模式

三、静态代理设计模式

[3.1 存在的问题](#3.1 存在的问题)


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

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

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

二、代理设计模式

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

1)代理开发的核心要素

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

2)编码实现

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

java 复制代码
public interface UserService {
    void register();
    boolean login();
}

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

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

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

java 复制代码
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)进行测试

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

java 复制代码
public void test1() {
    UserService userService = new UserServiceProxy();
    userService.register();
    userService.login();
}

三、静态代理设计模式

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

3.1 存在的问题

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

相关推荐
付聪121027 分钟前
策略模式介绍和代码示例
设计模式
南宫生43 分钟前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
计算机毕设定制辅导-无忧学长1 小时前
Maven 基础环境搭建与配置(一)
java·maven
逸狼2 小时前
【JavaEE进阶】Spring MVC(3)
spring·java-ee·mvc
ThereIsNoCode2 小时前
「软件设计模式」状态模式(State)
设计模式·状态模式
风与沙的较量丶2 小时前
Java中的局部变量和成员变量在内存中的位置
java·开发语言
m0_748251722 小时前
SpringBoot3 升级介绍
java
极客先躯3 小时前
说说高级java每日一道面试题-2025年2月13日-数据库篇-请说说 MySQL 数据库的锁 ?
java·数据库·mysql·数据库的锁·模式分·粒度分·属性分
程序员侠客行3 小时前
Spring事务原理 二
java·后端·spring
小猫猫猫◍˃ᵕ˂◍4 小时前
备忘录模式:快速恢复原始数据
android·java·备忘录模式