栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Spring】静态代理设计模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Spring】静态代理设计模式

文章目录
  • 一、为什么需要代理设计模式
  • 二、代理设计模式
  • 三、静态代理编码
  • 四、静态代理存在的问题

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

在 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…

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284443.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号