• Java中的静态代理实现方式


    1、编写一个接口类

    如:Subject

     1 package com.neusoft.pattern.staticProxy;
     2 
     3 /**
     4  * <p>Title:</p>
     5  * <p>Description:代理接口对象</p>
     6  * <p>Copyright:Copyright (c) 2018</p>
     7  * <p>Company:东软集团股份有限公司</p>
     8  * CreateDate:2018/4/19 0019 下午 18:00
     9  * Author:段美林[duanml@neusoft.com]
    10  * Version:1.0
    11  */
    12 public interface Subject {
    13 
    14     void request();
    15 }

    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

     1 package com.neusoft.pattern.staticProxy;
     2 
     3 /**
     4  * <p>Title:</p>
     5  * <p>Description:客户端的调用模拟类</p>
     6  * <p>Copyright:Copyright (c) 2018</p>
     7  * <p>Company:东软集团股份有限公司</p>
     8  * CreateDate:2018/4/19 0019 下午 18:14
     9  * Author:段美林[duanml@neusoft.com]
    10  * Version:1.0
    11  */
    12 public class Client {
    13 
    14     public static void main(String[] args) {
    15 
    16         Subject subject = new Proxy(new RealSubject());
    17         subject.request();
    18     }
    19 }

    直接运行 此客户端 Main方法:

    控制台输入如下结果:

    即 达到了预想的效果, 在执行主体类 RealSubject.request()方法业务逻辑同时,嵌入了 Before、After相关业务操作,达到了切入的目的。

    上面即为JAVA中的静态代理实现方式!

  • 相关阅读:
    servlet生命周期总结
    两周找工作有感
    PowerBuilder中新建PBL
    oracle navicat 可视化操作进行数据的修改
    oracle for update for update nowait
    表中字段为关键字,查询字段加引号
    愿你
    oracle安装注意
    随笔
    JeeSite功能模块解读,功能介绍,功能实现
  • 原文地址:https://www.cnblogs.com/yinfengjiujian/p/8885317.html
Copyright © 2020-2023  润新知