【Spring】静态代理设计模式

44 篇文章 1 订阅

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

在 JavaEE 分层开发开发中,哪个层次对于我们来讲最重要?Service 层

Service 层中包含了哪些代码?

  • 核心功能(代码量较多):业务运算,DAO 调用
  • 额外功能(附加功能,不属于业务,可有可无,代码量小):事务、日志、性能 …

额外功能书写在 Service 层好不好?

  • Service 层的调用者的角度(Controller):需要在 Service 层书写额外功能。
  • 软件设计者:Service 层不需要额外功能。

拿现实生活中的例子来做对比,解决方案是 引入一个代理。
在这里插入图片描述

二、代理设计模式

概念:通过代理类,为原始类(目标类)增加额外的功能
好处:利于原始类(目标类)的维护

名词解释
目标类 / 原始类:指的是 业务类 (核心功能 --> 业务运算、DAO调用)
目标方法 / 原始方法:目标类(原始类)中的方法就是目标方法(原始方法)
额外功能 / 附加功能:日志、事务、性能 …

代理开发的核心要素
代理类 = 目标类(原始类) + 额外功能 + 原始类(目标类)实现相同的接口

房东 --- 目标类
public interface UserService {
	m1
	m2
}
public UserServiceImpl implements UserServiceImpl {
	m1 ---> 业务运算、调用DAO
	m2 
}
----------------------------------------------------
中介 --- 代理类:要实现目标类相同的接口
public UserServiceProxy implements UserService {
	m1
	m2
}

三、静态代理编码

静态代理:为每⼀个原始类,手工编写⼀个代理类(.java .class)

public class User {}
public interface UserService {
	void register(User user);
	boolean login(String name, String password);
}
public class UserServiceImpl implements UserService {
    @Override
    public void register(User user) {
        System.out.println("UserServiceImpl.register 业务运算 + DAO");
    }

    @Override
    public boolean login(String name, String password) {
        System.out.println("UserServiceImpl.login 业务运算 + DAO");
        return true;
    }
}
/**
 * 静态代理类编码实现
 */
public class UserServiceProxy implements UserService { // 实现原始类相同的接口
    private UserService userService = new UserServiceImpl(); // 代理类中必须有原始类
    @Override
    public void register(User user) {
        System.out.println("---log---"); // 额外功能
        userService.register(user);
    }
    @Override
    public boolean login(String name, String password) {
        System.out.println("---log---"); // 额外功能
        return userService.login(name, password);
    }
}

四、静态代理存在的问题

  • 静态类文件数量过多,不利于项目管理
    UserServiceImpl、UserServiceProxy、OrderServiceImpl、OrderServiceProxy…

  • 额外功能维护性差:在代理类中修改额外功能较为麻烦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望天边星宿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值