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中的静态代理实现方式的更多相关文章

  1. 一篇文章让你搞懂Java中的静态代理和动态代理

    什么是代理模式 代理模式是常用的java设计模式,在Java中我们通常会通过new一个对象再调用其对应的方法来访问我们需要的服务.代理模式则是通过创建代理类(proxy)的方式间接地来访问我们需要的服 ...

  2. java中的静态代理和动态代理,入门整理

    静态代理和动态代理主要解决的问题是:在直接访问对象时带来的问题,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后 ...

  3. 017 Java中的静态代理、JDK动态代理、cglib动态代理

    一.静态代理 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理. 静态代理由业务实现类.业务代理类两部分组成.业务实现类负责实现主要的业务方法,业 ...

  4. java中的静态代理和动态代理

    1.动态代理的定义:为其他对象提供一个代理以控制对这个对象的访问 代理类主要负责委托类的预处理消息,过滤消息,把消息传给委托类以及消息事后处理 按照代理类的创建时期,代理类可以分为2种:静态代理类(在 ...

  5. 十分钟理解Java中的动态代理

    十分钟理解 Java 中的动态代理   一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道 ...

  6. 深度剖析java中JDK动态代理机制

    https://www.jb51.net/article/110342.htm 本篇文章主要介绍了深度剖析java中JDK动态代理机制 ,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定 ...

  7. 一文读懂Java中的动态代理

    从代理模式说起 回顾前文: 设计模式系列之代理模式(Proxy Pattern) 要读懂动态代理,应从代理模式说起.而实现代理模式,常见有下面两种实现: (1) 代理类关联目标对象,实现目标对象实现的 ...

  8. 使用Java中的动态代理实现数据库连接池

    2002 年 12 月 05 日 作者通过使用JAVA中的动态代理实现数据库连接池,使使用者可以以普通的jdbc连接的使用习惯来使用连接池. 数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的 ...

  9. java中的动态代理机制

    java中的动态代理机制 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Class),这一个类和接口是实现 ...

随机推荐

  1. 2.JMeter查看结果树返回编码格式Unicode转为中文方法

    在使用JMeter做接口测试时,发现相同url,用postman工具,其返回数据参数为中文,而用JMeter工具,其返回参数为Unicode,如下图所示 解决方法如下: 1.Jmeter在对应的请求上 ...

  2. Python笔试面试题_牛客(待完善)

    中文,免费,零起点,完整示例,基于最新的Python 3版本.https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42 ...

  3. SharePoint2013工作流workflow manager配置

    SharePoint2013版本的工作流较sharepoint 2010变化较大,将工作流部分从sharepoint中分离出来为单独的服务,通过与sharepoint关联使用. SharePoint2 ...

  4. php 数据库类

    <?php /** * 对Yii2数据封装 * @author nike@youfumama.com * @date 2017-03-08 * 抽象类不能被实例化 * eg1: select u ...

  5. SQL语句 合并列值 将一列的多个值合并成一行

    效果: oralce写法: select WM_CONCAT(A.title) as citys from tmpcity A sql server写法: select stuff((select ' ...

  6. postman 请求 页面出现 Could not get any response 解决方法

    1.关闭掉证书 2.再关闭掉代理 3.去掉请求头的Content-Length字段 (或者一个个试请求头的值,看去掉那些就请求成功了) 后记: 网友 @ 重庆张晓祥 提供了个线索确实让我想起以前我从浏 ...

  7. Joker的自动化之路

    系统篇     颜色 黄绿+金色 使用mac系统常用工具(包含svn,vim,crt,redis,php5,网络性能命令) 计算机硬件         linux发展史            cent ...

  8. jquery发送数组

    假设keywordid_list是一个javascript数组,将它发送到keywordbatchsetting.php. $.ajax({ url:"keywordbatchsetting ...

  9. PyQt 5事件和信号

    信号槽Signals & slots sld.valueChanged.connect(lcd.display) # 将滚动条的valueChanged信号连接到lcd的display插槽 # ...

  10. 函数和object

    普通函数 在javascript中,函数是一等公民,函数在javascript是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用. 一.函数调用形式 函数调用形式是最常见的形式,也是 ...