• spring 之 静态代理


    1. 代理: 中介

    2. 通过程序来实现租房功能。分析下在租房的过程中,有哪些对象:

    • 房东
    • 中介
    • 房客

      中介代理房东进行租房的功能,所以中介和房东具有相同的功能。为了保证中介和房东具有相同的功能,那么中介和房东需要实现相同的接口。

    • 抽象的角色。

    代码的实现:Rent.java

    /**
     * 
     * 租房接口
     */
    public interface Rent {
        //租房
        public void rent();
    }

    Host.java

    /**
     * 
     * @author siggy
     * @version v.10 
     */
    public class Host implements Rent{
        @Override
        public void rent() {
            System.out.println("房东租房");
        }
    }

    Proxy.java

    /**
     * 中介
     */
    public class Proxy implements Rent{
        private Host host;
        public Proxy(Host host) {
            super();
            this.host = host;
        }
        @Override
        public void rent() {
            fare();
            host.rent();
            maintance();
        }
        private void fare(){
            System.out.println("收取中介费");
        }
        private void maintance(){
            System.out.println("维护");
        }
    }

    Client.java

    public class Client {
        public static void main(String[] args) {
            Host host = new Host();
            Proxy proxy = new Proxy(host);
            proxy.rent();
        }
    }

    以上代码就是静态代理的实现。通过上述案例可以知道:

    3. 静态代理是由4哥角色组成的:

    • 抽象角色
    • 真实角色
    • 代理角色
    • 调用角色

    类图:

    4. 将静态代理应用到项目中:

    公共的业务:Log.java

    public class Log {
        public static void log() {
            System.out.println("日志:类,方法, 参数");
        }
    }

    UserService.java

    public interface UserService {
        public void save();
        public void update();
        public void delete();
        public void get();
    }

    UserServiceImpl.java

    public class UserServiceImpl implements UserService{
        /**
         * 在每次实现业务方法时 需要增加一些公共的功能。
         * 如:日志,缓存,安全检查,事务等
         */
        public void save() {
            System.out.println("保存用户");
        }
    
        @Override
        public void update() {
            System.out.println("更新用户");
        }
    
        @Override
        public void delete() {
            System.out.println("删除用户");
        }
    
        @Override
        public void get() {
            System.out.println("获取用户");
        }
    
    }

    UserServiceImplProxy.java

    public class UserServiceImplProxy implements UserService{
        private UserService userService;
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
        @Override
        public void save() {
            //加入公共业务
            Log.log();
            userService.save();
        }
    
        @Override
        public void update() {
            Log.log();
            userService.update();
        }
    
        @Override
        public void delete() {
            Log.log();
            userService.delete();
        }
    
        @Override
        public void get() {
            Log.log();
            userService.get();
        }
    
    }

    5. 通过上述案例可知,静态代理:

      优点:  

    • 将公共业务和真实业务分离,实现解耦动作。
    • 方便了分工,做公共业务的人,专门处理公共业务,做领域业务的人做领域业务。利于维护

      缺点:代码量增加,业务更复杂。

      

      

  • 相关阅读:
    bootstrap4 Reboot details summary 美化(点选禁止选中文本,单行隐藏角标,多行后移)
    在C#中,Newtonsoft.Json + dynamic动态解析jsonString,jsonString转实体
    在C#中,Windows Console控制台 设置控制台标题、禁用关闭按钮、关闭快速编辑模式、插入模式
    MySql数据库中,判断表、表字段是否存在,不存在就新增
    Windows 10安装Docker 步骤及顺序
    AES加密解密 助手类 CBC加密模式
    处理模板页菜单高亮
    C# 按不同的字节编码,通过字节数去截取字符串
    2018年4月13日,祝自己24岁生日快乐!
    一个数值保存复选框的值
  • 原文地址:https://www.cnblogs.com/forever2h/p/6744197.html
Copyright © 2020-2023  润新知