Java中的静态代理实现方式
1、编写一个接口类
如:Subject
package com.neusoft.pattern.staticProxy; /**
* <p>Title:</p>
* <p>Description:代理接口对象</p>
* <p>Copyright:Copyright (c) 2018</p>
* <p>Company:东软集团股份有限公司</p>
* CreateDate:2018/4/19 0019 下午 18:00
* Author:段美林[duanml@neusoft.com]
* Version:1.0
*/
public interface Subject { void request();
}
2、编写一个主体类,即需要被代理的实体类 RealSubject 必须实现接口 Subject
如:RealSubject
package com.neusoft.pattern.staticProxy; /**
* <p>Title:</p>
* <p>Description:需要被代理实现的主体类</p>
* <p>Copyright:Copyright (c) 2018</p>
* <p>Company:东软集团股份有限公司</p>
* CreateDate:2018/4/19 0019 下午 18:14
* Author:段美林[duanml@neusoft.com]
* Version:1.0
*/
public class RealSubject implements Subject { @Override
public void request() {
System.out.println("real subject execute request=========");
}
}
3、编写一个代理类Proxy类,此类的目的是代理 RealSubject类执行相应的操作,即在 RealSubject类执行某个方法的时候,嵌入自己的其它业务逻辑
此代理类也必须 实现接口 Subject
如:Proxy
package com.neusoft.pattern.staticProxy; /**
* <p>Title:</p>
* <p>Description:代理类的实现</p>
* <p>Copyright:Copyright (c) 2018</p>
* <p>Company:东软集团股份有限公司</p>
* CreateDate:2018/4/19 0019 下午 18:05
* Author:段美林[duanml@neusoft.com]
* Version:1.0
*/
public class Proxy implements Subject { private RealSubject realSubject; public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
} @Override
public void request() { System.out.println("代理类运行,执行:"+ "Before is invoked~~~~~~"); try {
realSubject.request();
} catch (Exception e) {
System.out.println("ex:"+ e.getMessage());
throw e;
} finally {
System.out.println("代理类运行,执行:"+ "After is invoked~~~~~~");
}
}
}
说明:
1、此代理Proxy类必须实现接口 Subject
2、此代理Proxy类 必须 拥有 被代理类 RealSubject 的引用,并且通过构造方法传入 代理类中
3、代理类Proxy类由于实现了接口 Subject,即实现了共同的方法request(),代理类在实现的request()方法中先编写实现自己的业务逻辑代码,Before的相关操作
然后调用主体类的 RealSubject 执行 被代理类的 原有业务逻辑代码,最后 在执行完被代理类的业务方法后,执行 自己的After相关操作
4、由此可见通过 1、2、3三步,代理类Proxy 执行了 主体被代理类的RealSubject.request()相关业务逻辑的同时,嵌入了 自己的 Before操作、After操作,而达到相应的嵌入操作
4、编写客户端访问类Client
如:Client
package com.neusoft.pattern.staticProxy; /**
* <p>Title:</p>
* <p>Description:客户端的调用模拟类</p>
* <p>Copyright:Copyright (c) 2018</p>
* <p>Company:东软集团股份有限公司</p>
* CreateDate:2018/4/19 0019 下午 18:14
* Author:段美林[duanml@neusoft.com]
* Version:1.0
*/
public class Client { public static void main(String[] args) { Subject subject = new Proxy(new RealSubject());
subject.request();
}
}
直接运行 此客户端 Main方法:
控制台输入如下结果:

即 达到了预想的效果, 在执行主体类 RealSubject.request()方法业务逻辑同时,嵌入了 Before、After相关业务操作,达到了切入的目的。
上面即为JAVA中的静态代理实现方式!
Java中的静态代理实现方式的更多相关文章
- 一篇文章让你搞懂Java中的静态代理和动态代理
什么是代理模式 代理模式是常用的java设计模式,在Java中我们通常会通过new一个对象再调用其对应的方法来访问我们需要的服务.代理模式则是通过创建代理类(proxy)的方式间接地来访问我们需要的服 ...
- java中的静态代理和动态代理,入门整理
静态代理和动态代理主要解决的问题是:在直接访问对象时带来的问题,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后 ...
- 017 Java中的静态代理、JDK动态代理、cglib动态代理
一.静态代理 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理. 静态代理由业务实现类.业务代理类两部分组成.业务实现类负责实现主要的业务方法,业 ...
- java中的静态代理和动态代理
1.动态代理的定义:为其他对象提供一个代理以控制对这个对象的访问 代理类主要负责委托类的预处理消息,过滤消息,把消息传给委托类以及消息事后处理 按照代理类的创建时期,代理类可以分为2种:静态代理类(在 ...
- 十分钟理解Java中的动态代理
十分钟理解 Java 中的动态代理 一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道 ...
- 深度剖析java中JDK动态代理机制
https://www.jb51.net/article/110342.htm 本篇文章主要介绍了深度剖析java中JDK动态代理机制 ,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定 ...
- 一文读懂Java中的动态代理
从代理模式说起 回顾前文: 设计模式系列之代理模式(Proxy Pattern) 要读懂动态代理,应从代理模式说起.而实现代理模式,常见有下面两种实现: (1) 代理类关联目标对象,实现目标对象实现的 ...
- 使用Java中的动态代理实现数据库连接池
2002 年 12 月 05 日 作者通过使用JAVA中的动态代理实现数据库连接池,使使用者可以以普通的jdbc连接的使用习惯来使用连接池. 数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的 ...
- java中的动态代理机制
java中的动态代理机制 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Class),这一个类和接口是实现 ...
随机推荐
- 洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分
题目:https://www.luogu.org/problemnew/show/P1527 不难想到(?)可以用二维树状数组.但维护什么?怎么查询是难点. 因为求第k小,可以考虑记权值树状数组,把比 ...
- Spring Boot 入门之持久层篇(三)
原文地址:Spring Boot 入门之持久层篇(三) 博客地址:http://www.extlight.com 一.前言 上一篇<Spring Boot 入门之 Web 篇(二)>介绍了 ...
- JavaFX 之窗口跳转(一)
一.前言 笔者此处不讲JavaFX的基础API,只针对笔者工作时遇到的问题进行记录与总结. 零基础的网友可以访问 http://www.javafxchina.net/blog/docs/tutori ...
- Regexper:牛逼的 JavaScript 正则可视化工具
RequireJS Optimizer 是 RequireJS 自带的前端优化工具,可以对 RequireJS 项目中的 JavaScript & CSS 代码使用 UglifyJS 或者 C ...
- 以图文解锁 HTTPS原理***
我们先不了聊HTTP,HTTPS,我们先从一个聊天软件说起,我们要实现A能发一个hello消息给B: 如果我们要实现这个聊天软件,本文只考虑安全性问题,要实现: A发给B的hello消息包,即使被中间 ...
- javascript基础-js继承
1.prototype方式 示例:没有使用prototype(下列这些代码只能获取array1数组的总和,而无法对array2数据进行求和) var array1 = new Array(1,4,9, ...
- 用活firewalld防火墙中的zone
原文地址:http://www.excelib.com/article/290/show firewalld中zone的含义学生前面已经给大家介绍过了,说白了一个zone就是一套规则集.可是什么时候该 ...
- http遇到的那些坑,iis上传文件报413错误 asp.net MVC
话不多说,直接上解决方法. 修改配置文件 applicationHost.config 具体地址在C:\Windows\System32\inetsrv\config 按照下面的节点进行 添加&l ...
- 使用apache common-io 监控文件变化
package common.io; import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.common ...
- canvas之画圆
<canvas id="canvas" width="500" height="500" style="background ...