zoukankan      html  css  js  c++  java
  • 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);
    }
    }
  • 相关阅读:
    新闻发布项目——实体类(comment)
    新闻发布项目——实体类(comment)
    新闻发布项目——实体类(newsTb)
    新闻发布项目——实体类(newsTb)
    新闻发布项目——实体类(newsTb)
    新闻发布项目——实体类(User)
    新闻发布项目——实体类(User)
    新闻发布项目——实体类(User)
    2016经典微小说:《轮回》
    要么干,要么滚,千万别混
  • 原文地址:https://www.cnblogs.com/zhangjwcode/p/6963254.html
Copyright © 2011-2022 走看看