文章目录

  • 一、静态代理代码示例
    • 1、订单类
    • 2、Service 接口
    • 3、Service 实现类
    • 4、Service 静态代理类
    • 5、Dao 接口
    • 6、Dao 实现类
    • 7、测试类

一、静态代理代码示例


业务场景 : 保存订单信息 , 在 Service 层处理订单保存 , 在 Dao 层将订单存储到数据库 ; 使用静态代理类加强 Service 层的功能 ;

1、订单类

package proxy;/*** 订单类*      存储订单时 , 通过 Service 层通接收 Order 对象进行处理*/
public class Order {/*** 订单信息*/private Object orderInfo;/*** 用户 ID*/private Integer userId;public Order(Object orderInfo, Integer userId) {this.orderInfo = orderInfo;this.userId = userId;}public Object getOrderInfo() {return orderInfo;}public void setOrderInfo(Object orderInfo) {this.orderInfo = orderInfo;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}
}

2、Service 接口

package proxy;/*** 服务接口*/
public interface IOrderService {/*** 保存订单* @param order 数据库生效行数* @return*/int saveOrder(Order order);
}

3、Service 实现类

package proxy;public class OrderServiceImpl implements IOrderService {private IOrderDao iOrderDao;public OrderServiceImpl(IOrderDao iOrderDao) {this.iOrderDao = iOrderDao;}@Overridepublic int saveOrder(Order order) {System.out.println("Service 层插入 Order 订单信息成功");return this.iOrderDao.insert(order);}
}

4、Service 静态代理类

package proxy;/*** 订单服务静态代理类*/
public class OrderServiceStaticProxy {private IOrderService iOrderService;public OrderServiceStaticProxy(IOrderService iOrderService) {this.iOrderService = iOrderService;}public int saveOrder(Order order){beforeMethod();int result = iOrderService.saveOrder(order);afterMethod();return result;}/*** 在被代理对象方法之前执行的内容*/private void beforeMethod() {System.out.println("静态代理 OrderServiceStaticProxy 执行 saveOrder 之前");}/*** 在被代理对象方法之后执行的内容*/private void afterMethod() {System.out.println("静态代理 OrderServiceStaticProxy 执行 saveOrder 之后");}
}

5、Dao 接口

package proxy;/*** 数据库接口*/
public interface IOrderDao {/*** 向数据库中插入订单信息* @param order* @return*/int insert(Order order);
}

6、Dao 实现类

package proxy;public class OrderDaoImpl implements IOrderDao {@Overridepublic int insert(Order order) {System.out.println("Dao 层插入 Order 订单信息成功");return 1;}
}

7、测试类

package proxy;public class Main {public static void main(String[] args) {Order order = new Order("书籍订单", 1);IOrderDao dao = new OrderDaoImpl();IOrderService service = new OrderServiceImpl(dao);// 不使用代理的情况service.saveOrder(order);System.out.println();// 使用代理的情况OrderServiceStaticProxy proxy = new OrderServiceStaticProxy(service);proxy.saveOrder(order);}
}

执行结果 :

Service 层插入 Order 订单信息成功
Dao 层插入 Order 订单信息成功静态代理 OrderServiceStaticProxy 执行 saveOrder 之前
Service 层插入 Order 订单信息成功
Dao 层插入 Order 订单信息成功
静态代理 OrderServiceStaticProxy 执行 saveOrder 之后

【设计模式】代理模式 ( 静态代理 )相关推荐

  1. 第六周 Java语法总结_设计原则_工厂模式_单例模式_代理模式(静态代理_动态代理)_递归_IO流_网络编程(UDP_TCP)_反射_数据库

    文章目录 20.设计原则 1.工厂模式 2.单例模式 1)饿汉式 2)懒汉式 3.Runtime类 4.代理模式 1)静态代理 2)动态代理 动态代理模板 21.递归 22.IO流 1.File 2. ...

  2. 【Android 插件化】Hook 插件化框架 ( Hook 技术 | 代理模式 | 静态代理 | 动态代理 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  3. Java代理模式/静态代理/动态代理

    代理模式:即Proxy Pattern,常用的设计模式之一.代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问. 代理概念 :为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委 ...

  4. 代理模式——静态代理,动态代理(JDK代理和CGLib代理)

    概述 由于某些原因需要给某对象提供一个代理以控制对该对象的访问. 这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. Java中的代理按照代理类生成时机不同又分为 ...

  5. [设计模式] - 代理模式(静态代理与动态代理)

    文章目录 一.代理模式简介 1. 什么是代理模式 2. 简单举例 二.代理模式的设计思路 1. 代理模式的构成 1. 静态代理 2. 动态代理 (1)接口代理 (2)Cglib代理 三. 代理模式总结 ...

  6. Android代理模式(静态代理,动态代理,Retrofit代理模式分析)

    文章目录 代理模式 前言:AOP编程(面向切面编程) 一. 代理思想 1. 静态代理 2. 动态代理 3. 动态代理的实现 二. Retrofit代理模式分析 代理模式 前言:AOP编程(面向切面编程 ...

  7. 代理模式 静态代理、JDK动态代理、Cglib动态代理

    1 代理模式 使用代理模式时必须让代理类和被代理类实现相同的接口: 客户端通过代理类对象来调用被代理对象方法时,代理类对象会将所有方法的调用分派到被代理对象上进行反射执行: 在分派的过程中还可以添加前 ...

  8. Java代理模式——静态代理动态代理

    proxy mode 1. 什么是代理 1.1 例子解释 1.2 作用 2. 静态代理 2.1 优缺点分析 2.2 以厂家卖u盘用代码说明 3. 动态代理 3.1 什么是动态代理 3.2 jdk实现原 ...

  9. 【设计模式】代理模式 ( 动态代理 | 模拟 Java 虚拟机生成对应的 代理对象 类 )

    文章目录 前言 一.模拟 JVM 生成对应的 代理对象 二.模拟 JVM 生成对应的 代理对象 完整流程展示 1.目标对象接口 2.被代理对象 3.调用处理程序 4.模拟 JVM 生成的代理对象类 5 ...

最新文章

  1. 【深度学习】Focal Loss 与 GHM——解决样本不平衡问题
  2. 全新章节抢先读 | 揭秘覆盖全端业务的文娱大前端技术
  3. Java多线程(7)--线程池创建线程
  4. LeetCode 526. 优美的排列(回溯)
  5. SpringBoot的Bean之基本定义与使用
  6. Java程序性能优化16
  7. HackMyvm靶机系列(5)-warez
  8. 百度前员工因内网发布“女优一览表”被辞退,自诉原因:想转岗鉴黄师.........
  9. linux串口结构termios,Termios--串口设置
  10. 30余种加密编码类型的密文特征分析(建议收藏)
  11. python字符串行列转换_Excel、SQL、Python分别实现行列转换
  12. 多少层楼听不见街边噪音_街边刮板
  13. android 虚拟按键自定义,Android手机底部栏虚拟按键的操作
  14. Java的IO流 ,BIO NIO AIO 的区别?
  15. 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 get-help about_signing
  16. js提取数组对象中的最大值和最小值
  17. ubuntu查看usb和连接手机usb共享热点
  18. simm计算机英语,SIMM
  19. Python3爬取Bing每日图片,并设置为电脑桌面
  20. 点击图片显示另外一张图片

热门文章

  1. Guava学习笔记:Preconditions优雅的检验参数
  2. 解决vs启动出现“cannot find one or more components .Please reinstall the application”
  3. Java实现单例模式
  4. Swift学习------常量与变量
  5. angular入门-ngOptions
  6. 一个请求方法是一个线程吗?不是!
  7. java.lang.Enum
  8. Go 1.9 sync.Map揭秘
  9. 使用消息队列实现分布式事务-公认较为理想的分布式事务解决方案(转)
  10. AngularJS实现原理