使用静态代理时需要让目标对象和代理对象一起实现相同的接口或者继承相同的父类。这样做的目的就是为了通过调用代理对象中和目标对象相同的方法来实现调用目标对象的方法,从而达到代理的效果。

第一步定义接口

public interface IStatictProxy {void print();
}

第二步实现接口(目标对象)

@Slf4j
public class TargetImpl implements IStatictProxy{@Overridepublic void print() {log.info("静态代理目标对象实现类打印!");}
}

第三步代理类实现接口

代理类中注入接口,构造方法同时显示声明

@Slf4j
public class StaticProxyImpl implements IStatictProxy {// 通过接口聚合被代理的类private IStatictProxy proxy;// 构造方法public StaticProxyImpl(IStatictProxy proxy) {this.proxy = proxy;}@Overridepublic void print() {log.info("代理对象中的打印方法执行开始!");proxy.print();log.info("代理对象中的打印方法执行结束!");}public static void main(String[] args) {TargetImpl target = new TargetImpl();StaticProxyImpl staticProxy = new StaticProxyImpl(target);staticProxy.print();}
}

第四部 运行代理类

Connected to the target VM, address: '127.0.0.1:8238', transport: 'socket'
15:58:58.310 [main] INFO com.hkwl.hkboot.smp.proxy.StaticProxyImpl - 代理对象中的打印方法执行开始!
15:58:58.317 [main] INFO com.hkwl.hkboot.smp.proxy.TargetImpl - 静态代理目标对象实现类打印!
15:58:58.317 [main] INFO com.hkwl.hkboot.smp.proxy.StaticProxyImpl - 代理对象中的打印方法执行结束!
Disconnected from the target VM, address: '127.0.0.1:8238', transport: 'socket'

从上面的实现来看,总结优缺点如下:

优点:实现简单,容易理解,只要确保目标对象和代理对象实现共同的接口或继承相同的父类就可以在不修改目标对象的前提下进行扩展。

缺点:代理类和目标类必须有共同接口(父类),并且需要为每一个目标类维护一个代理类,当需要代理的类很多时会创建出大量代理类。一旦接口或父类的方法有变动,目标对象和代理对象都需要作出调整。

Java实现静态代理相关推荐

  1. JAVA的静态代理与动态代理比较--转载

    扩展:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/JAVA的静态代理与动态代理比较 一.概念 代理模式是常用的Java 设计模式,它的特 ...

  2. 代理模式-Java实现-静态代理、动态代理

    目录 代理模式 静态代理 动态代理 代理模式 代理模式指的是一个类代表另一个类的功能,也就是一个类可以作为另一个类的代理. 代理模式属于结构型模式. 代理类不仅拥有真实类的功能,还可以提供一些额外的附 ...

  3. 浅谈java的静态代理模式

    嗨喽-小伙伴们XX好呀, 本章我们来介绍,java中出现的静态代理模式. 代理,对应于英语单词-----Proxy,从字面上理解,就是在实现代理目标(Target)所有的需求的同时,还能够实现代理目标 ...

  4. Java基础-静态代理以及动态代理

    动态代理: 在了解动态代理之前,先对代理有一个认识. 代理模式是Java常见的设计模式之一.所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象. 打个比方:你买火车 ...

  5. java基础-静态代理与动态代理

    一.代理模式的原理 1.1.代理模式是如何实现的 代理模式是常用的设计模式之一,它一般分为三个角色: 抽象角色:指代理角色和真实角色对外提供的公共方法,一般为一个接口 真实角色:需要实现抽象角色接口, ...

  6. java 动静态代理(https://www.cnblogs.com/V1haoge/p/5860749.html)

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动态代理 ...

  7. java从静态代理到动态代理的理解

    为什么需要静态代理? 首先解决这个问题之前得先明白什么是静态代理.其实就是二道贩子. - 解释一下图中的乙机构所作的事情就是静态代理,从商业角度上来说,就是找个人帮你做额外的一些服务. 从代码的角度, ...

  8. 【java】静态代理 proxy

    1.美图 2. 静态代理 2.1 案例 2.1.1 被代理接口和实现类 package com.spring.boot.proxy.stati;/*** Description: 账户接口** @au ...

  9. 小白都能懂的设计模式 java版 静态代理模式实战练习(超详细)

    静态代理: 角色分析: 抽象角色:一般使用接口或者是抽象类来解决 真实角色:被代理的角色 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作 客户:访问代理对象的人 以一个租房子的例子来 ...

  10. 【Java】静态代理和动态代理简单实现和原理分析

    静态代理 1.定义抽象接口 首先将业务功能抽象出来,比如购买机票,所有的航空公司都提供一个购买的渠道,那么将这个购买行为抽象作为一个接口AirLine public interface AirLine ...

最新文章

  1. 群晖docker_利用群晖docker搭建Minecraft服务器:图形界面操作,傻瓜式教程(附官方服务器端地址)_NAS存储...
  2. 【Xamarin开发 Android 系列 12】 创建一个Json读取数据应用-添加定位服务
  3. create new page group - ST05
  4. 前端学习(512):两列布局的第一种方式的优缺点
  5. java生成pdf_JAVA 生成PDF 并导出
  6. 前后端分离,如何解决跨域问题
  7. js分页展示控件,传入简单参数就能使用的分页效果控件
  8. 苹果x漫画脸_【漫画大全】:漫画韩国全集
  9. c语言中循环指令m=_crol_(m,1),单片机中关于_crol_函数 aa=_crol_(aa,1),执行八次之后流水灯为什么回到了初始状态继续循环 ?...
  10. 技术团队如何高效开会
  11. 怎么监控mysql数据变化_mysql数据库数据变化实时监控
  12. nodejs-指定长度断句
  13. Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)
  14. 国产服务器(麒麟操作系统),springboot应用并发访问redis数据错乱解决方案
  15. 根号分治练手题 西比拉先知系统 题解
  16. 毛玻璃matlab,QA清单(毛玻璃赛题)
  17. 【量化笔记】配对交易
  18. RX590GME黑苹果刷RX580 2304SP BIOS
  19. 技术篇|Python 类,和它在 Keras 中的使用(附代码教程)
  20. 学习MEF系列(1):MEF是什么?

热门文章

  1. 通过 web 录制视频(摄像头)并上传
  2. 万维c语言作业,万维考试系统-c语言题库-含题目-程序设计题导出-113道.doc
  3. python读取lmdb文件_python中读写LMDB数据库
  4. andorid 查看 Activity任务栈
  5. P1600 [NOIP2016 提高组] 天天爱跑步
  6. ASIO音频驱动开发指南 2.0
  7. java:单例模式的五种实现方式
  8. 简单的html颜色选择器
  9. launchpad乐器_一起认识 Launchpad 系列——中篇
  10. 测试工具(一)——Abbot 测试SWT