• Java代理模式


    代理模式是一种使用非常广泛的设计模式。在spring中的AOP,dubbo等框架中都有他的身影。

    它的简单结构如下:

    下面是静态代理模式的简单实现。

    接口:

    public interface TalkService {
    void speakChinese();
    }

    //委托类
    public class RealSubject implements TalkService {
    @Override
    public void speakChinese() {
    System.out.println("你好!");
    }
    }

    //代理类
    public class Proxy implements TalkService {
    private RealSubject realSubject;

    public Proxy(RealSubject realSubject) {
    this.realSubject = realSubject;
    }

    @Override
    public void speakChinese() {
    System.out.println("begin");
    realSubject.speakChinese();
    System.out.println("end");
    }
    }
    下面是测试类:
    //Test
    public class Test {
    public static void main(String[] args) {
    RealSubject realSubject = new RealSubject();
    Proxy p = new Proxy(realSubject);
    p.speakChinese();
    }
    }

    以上就是静态代理模式的实现,动态代理是为了能够动态的代理各个委托类,不需要为每个委托类都设计一个代理类。动态代理的关键点
    就是反射的应用。通过传入的目标委托类名称,动态反射出该目标类的对象,关键代码如下。

    public class MyInvokeHandler implements InvocationHandler {
    private Object target;

    public MyInvokeHandler(Object target) {
    this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    System.out.println("before");
    Object result = method.invoke(target,args);
    System.out.println("end");
    return result;
    }

    public Object getProxy() {
    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    Class<?>[] interfaces = target.getClass().getInterfaces();
    return Proxy.newProxyInstance(loader, interfaces, this);
    }
    }
  • 相关阅读:
    如何在帮助页面添加测试工具
    如何给你的ASP.NET页面添加HelpPage
    各种序列化库的性能数据
    Quartz.NET配置
    T-SQL中只截取日期的日期部分和日期的时间部分
    sql 根据指定条件获取一个字段批量获取数据插入另外一张表字段中+MD5加密
    读取图片数据流转换成图片
    T-SQL Transact-SQL 编程
    Python 链接Mysql数据库
    c 生成随机不重复的整数序列
  • 原文地址:https://www.cnblogs.com/zhangjwcode/p/6963254.html
Copyright © 2020-2023  润新知