一、静态代理是什么?

代理模式是常用的Java设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。

静态代理类:由程序员创建生成源代码,再对其编译,即创建一个代理类。在程序运行前,代理类就已经存在了。

二、使用步骤

代码步骤:
1.接口
⒉真实角色
3.代理角色
4.客户端访问代理角色
下面以租房为例子:

1.需要的类

房东需要出租房子,房东的类

package com.shan.demo01;public class Host implements Rent{public void rent(){System.out.println("房东要出租房子!");}}

客户需要租房子,客户的类
客户找代理租房子,客户和代理交接

package com.shan.demo01;public class Client {public static void main(String[] args) {//代理帮房东出租房子,但是代理会有自己的操作Proxy proxy = new Proxy(new Host());//你不用面对房东租房,直接可以找代理租房proxy.rent();}
}

代理人需要和两边同时交接,代理的类

package com.shan.demo01;public class Proxy implements Rent{private Host host;public Proxy() {}public Proxy(Host host) {this.host = host;}@Overridepublic void rent() {host.rent();seeHouse();this.fare();this.hetong();}//看房public void seeHouse(){System.out.println("代理带你看房");}//收中介费public void fare(){System.out.println("收中介费");}//签租赁合同public void hetong(){System.out.println("签租赁合同");}}

共同的接口,租房的方法

package com.shan.demo01;public interface Rent {//租房public void rent();}

2.解析

客户想要租房子,房东想要出租房子,可是客户不容易找到房东,于是客户找到了中介(代理类),中介帮房东出租房子,中介把房子出租给客户,中介还可以干自己的事情,不会影响到业务。
最终客户只要找到代理类,去调用代理的方法就能完成租房子,而不需要直接面向房东!并且代理类能有他自己的事情(代理收中介费等等);不会影响业务!
这就是代理的作用!

总结

优点

  • 可以使真实角色的操作更加纯粹!不用去关注一些公共的业务
  • 公共业务交给了代理,实现了业务的分工
  • 公共业务发生拓展时,方便集中管理

缺点:

  • 一个真实的角色就会产生一个代理,代码量翻倍,开发效率降低

作者有话说

博客创作不易,希望看到这里的读者动动你的小手点个赞,如果喜欢的小伙伴可以一键三连,作者大大在这里给大家谢谢了。

Spring学习8之静态代理相关推荐

  1. Spring学习9之静态代理再理解

    一.代理是什么? 代理的概念: 生活中的代理是很常见的,比如代购.律师.中介等,他们都有一个共性就是帮助被代理人处理一些前前后后的事情.而被代理人只需要专注做自己要做的那部分事情就可以了. Java中 ...

  2. Spring AOP中的静态代理和动态代理的原理和实践

    对于最近博主最近写博客的兴致大发,我也在思考:为什么而写博客?在互联网时代,无论你是牛人大咖,还是小白菜鸟,都有发表自己看法的权利.无论你是对的还是错的,都会在这个平台上找到答案.所以,我会尽可能去写 ...

  3. spring AOP原理分析:静态代理;JDK实现接口动态代理;Cglib继承父类代理;SpringAop的责任链模式调用

    普通静态代理 代理类和真实类都需要实现同一个接口 接口 package com.fchan.layui.represent.service; /*** 静态代理demo*/ public interf ...

  4. Spring学习10之动态代理

    前言 优点 可以使真实角色的操作更加纯粹!不用去关注一些公共的业务 公共业务交给了代理,实现了业务的分工 公共业务发生拓展时,方便集中管理 缺点: 一个真实的角色就会产生一个代理,代码量翻倍,开发效率 ...

  5. Spring 学习总结 使用静态工厂创建Bean

    创建Bean时,class属性必须指定,此时为静态工厂类. factory-method指定静态工厂方法名. 接口: 1 2 3 public interface Being {     public ...

  6. spring学习笔记 -- day06 动态代理

    一.基于接口的动态代理 1.被代理的类实现的接口 package cn.itcast.proxy;/*** 经纪公司的签约演员的规范* @author zhy**/ public interface ...

  7. 【Spring AOP】静态代理设计模式、Spring 动态代理开发详解、切入点详解(切入点表达式、切入点函数)

    AOP 编程 静态代理设计模式 1. 为什么需要代理设计模式 2. 代理设计模式 名词解释 代理开发的核心要素 静态代理编码 静态代理存在的问题 Spring 动态代理开发 搭建开发环境 Spring ...

  8. Spring源码深度解析(郝佳)-学习-源码解析-创建AOP静态代理实现(八)

    继上一篇博客,我们继续来分析下面示例的 Spring 静态代理源码实现. 静态 AOP使用示例 加载时织入(Load -Time WEaving,LTW) 指的是在虚拟机载入字节码时动态织入 Aspe ...

  9. Spring——AOP学习(静态代理和动态代理模式)

    Spring--AOP学习(静态代理和动态代理模式) 一.代理模式 我们知道学习Spring最重要的两个知识点就是IOC和AOP,AOP的主要思想就是动态代理模式.在了解AOP之前我们必须学习动态代理 ...

最新文章

  1. Google I/O 2019上提及的Javascript新特性
  2. python turtle画气球-python windows下显示托盘区气球消息
  3. 过年了,花money的时候到了
  4. 2.1.4 什么是ASCII码?汉字的表示和编码是怎样的?
  5. java面向对象课件_《JAVA面向对象基础》PPT课件.ppt
  6. 《深入理解 Spring Cloud 与微服务构建》第三章 Spring Cloud
  7. 真机调试时部分日志丢失(魅族)
  8. VB取得TextBox、RichTextBox光标所在的行和列(支持汉字)
  9. Original error was: DLL load failed while importing _multiarray_umath: 找不到指定的模块
  10. 关于caffe-ssd训练时smooth_L1到底参与运算与否的问题
  11. c语言标识符附录,附录AC语言运算符表.PDF
  12. 献给自己技术成长的第二年
  13. 我的新书,《第一行代码 Android 第3版》已出版!
  14. Navicat Premium 11.0.19中文破解版 安装
  15. 华章教育pdf计算机,AB-PLC华章培训全集.pdf
  16. java 多定时任务_多机部署之定时任务完整方案
  17. 试题 算法提高 盾神与积木游戏
  18. 改变文本颜色和字体大小的脚本
  19. STL--list的模拟实现
  20. 拿火柴游戏(拿子游戏)

热门文章

  1. Anaconda中安装pytorch,并在pycharm中配置【win10】
  2. 中小型研发团队架构实践:微服务架构
  3. Kafka设计解析(五):Kafka Benchmark--转
  4. java中hashMap的排序
  5. SQL 四种连接:内连接、左外连接、右外连接、全连接--转载
  6. JDK源码重新编译——支持eclipse调试JDK源码--转载
  7. 【采用】解读消金业务风控模型的6个层级
  8. vue实战第一课:天气查询
  9. Spring Boot实战系列《六》:人事管理系统的登录设计
  10. 微信研究员解析深度学习在NLP中的发展和应用