Spring学习8之静态代理
一、静态代理是什么?
代理模式是常用的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之静态代理相关推荐
- Spring学习9之静态代理再理解
一.代理是什么? 代理的概念: 生活中的代理是很常见的,比如代购.律师.中介等,他们都有一个共性就是帮助被代理人处理一些前前后后的事情.而被代理人只需要专注做自己要做的那部分事情就可以了. Java中 ...
- Spring AOP中的静态代理和动态代理的原理和实践
对于最近博主最近写博客的兴致大发,我也在思考:为什么而写博客?在互联网时代,无论你是牛人大咖,还是小白菜鸟,都有发表自己看法的权利.无论你是对的还是错的,都会在这个平台上找到答案.所以,我会尽可能去写 ...
- spring AOP原理分析:静态代理;JDK实现接口动态代理;Cglib继承父类代理;SpringAop的责任链模式调用
普通静态代理 代理类和真实类都需要实现同一个接口 接口 package com.fchan.layui.represent.service; /*** 静态代理demo*/ public interf ...
- Spring学习10之动态代理
前言 优点 可以使真实角色的操作更加纯粹!不用去关注一些公共的业务 公共业务交给了代理,实现了业务的分工 公共业务发生拓展时,方便集中管理 缺点: 一个真实的角色就会产生一个代理,代码量翻倍,开发效率 ...
- Spring 学习总结 使用静态工厂创建Bean
创建Bean时,class属性必须指定,此时为静态工厂类. factory-method指定静态工厂方法名. 接口: 1 2 3 public interface Being { public ...
- spring学习笔记 -- day06 动态代理
一.基于接口的动态代理 1.被代理的类实现的接口 package cn.itcast.proxy;/*** 经纪公司的签约演员的规范* @author zhy**/ public interface ...
- 【Spring AOP】静态代理设计模式、Spring 动态代理开发详解、切入点详解(切入点表达式、切入点函数)
AOP 编程 静态代理设计模式 1. 为什么需要代理设计模式 2. 代理设计模式 名词解释 代理开发的核心要素 静态代理编码 静态代理存在的问题 Spring 动态代理开发 搭建开发环境 Spring ...
- Spring源码深度解析(郝佳)-学习-源码解析-创建AOP静态代理实现(八)
继上一篇博客,我们继续来分析下面示例的 Spring 静态代理源码实现. 静态 AOP使用示例 加载时织入(Load -Time WEaving,LTW) 指的是在虚拟机载入字节码时动态织入 Aspe ...
- Spring——AOP学习(静态代理和动态代理模式)
Spring--AOP学习(静态代理和动态代理模式) 一.代理模式 我们知道学习Spring最重要的两个知识点就是IOC和AOP,AOP的主要思想就是动态代理模式.在了解AOP之前我们必须学习动态代理 ...
最新文章
- Google I/O 2019上提及的Javascript新特性
- python turtle画气球-python windows下显示托盘区气球消息
- 过年了,花money的时候到了
- 2.1.4 什么是ASCII码?汉字的表示和编码是怎样的?
- java面向对象课件_《JAVA面向对象基础》PPT课件.ppt
- 《深入理解 Spring Cloud 与微服务构建》第三章 Spring Cloud
- 真机调试时部分日志丢失(魅族)
- VB取得TextBox、RichTextBox光标所在的行和列(支持汉字)
- Original error was: DLL load failed while importing _multiarray_umath: 找不到指定的模块
- 关于caffe-ssd训练时smooth_L1到底参与运算与否的问题
- c语言标识符附录,附录AC语言运算符表.PDF
- 献给自己技术成长的第二年
- 我的新书,《第一行代码 Android 第3版》已出版!
- Navicat Premium 11.0.19中文破解版 安装
- 华章教育pdf计算机,AB-PLC华章培训全集.pdf
- java 多定时任务_多机部署之定时任务完整方案
- 试题 算法提高 盾神与积木游戏
- 改变文本颜色和字体大小的脚本
- STL--list的模拟实现
- 拿火柴游戏(拿子游戏)