美文网首页
静态/动态代理模式

静态/动态代理模式

作者: Vekaco | 来源:发表于2018-07-30 23:56 被阅读0次

代理, 顾名思义就是让别人替你完成或处理事情。

在Java设计模式中,代理模式又可分为静态代理和动态代理模式。静态代理模式是通过构建各种xxxProxy来实现代理模式,这样会导致项目中到处都是xxxProxy类;而动态模式相对较为灵活,通过反射机制进行灵活的构建代理类。

1)静态代理模式

先创建一个接口:

    public interface Hello{
        void say(String name);
    }

为接口创建一个实现类:

public class void HelloImpl implements Hello {
    public void say(String name) {
        System.out.println("Hello!" + name);
    }
}

为了实现在输出hello!+ name 前后输出提示信息,我们创建一个代理类:

public class HelloProxy implements Hello {
    private Hello hello;
    public HelloProxy() {
    hello = new HelloImpl();
}

public void say(String name) {
    before();
    hello.say(name);
    after();
}

private void before() {
    System.out.println("Before");
}
private void after() {
    System.out.println("After");
}
}

最后通过main函数来进行调用:

public static  void main(String[] args){
  Hello helloProxy = new HelloProxy();
  helloProxy.say("Jack");
}

2)动态代理模式

动态代理模式则是通过Object类型的target变量,作为被代理的目标对象,将其通过注入的方式(构造函数注入)进行初始化。

构造如下动态代理类:

public class DynamicProxy implements InvocationHandler{

    private Object target;

    public DynamicProxy(Object target) {
        this.target = target;
    }
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        before();
        Object result = method.invoke(target, args);
        after();
        return result;
    }

    public <T> T getProxy() {
        return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }

    private void before() {
        System.out.println("Before");
    }

    private void after() {
        System.out.println("After");
    }
  }

在main方法中调用

public static void main(String[] args) {

        Hello hello = new HelloImpl();

        DynamicProxy dynamicProxy = new DynamicProxy(hello);

        Hello helloProxy = (Hello) dynamicProxy.getProxy();
        helloProxy.say("Mike");
    }

source code: https://github.com/Vekaco/proxy-static-dynamic

相关文章

  • Spring之代理模式

    九、代理模式 目录:静态代理、动态代理AOP的底层机制就是动态代理。代理模式分为静态代理和动态代理。接触aop之前...

  • 带你初识Java的代理模式

    Spring AOP是基于动态代理设计模式实现的,相对的就有静态代理 动态代理和静态代理 静态代理 对于静态代理,...

  • java代理模式

    代理模式分为动态代理和静态代理

  • 设计模式

    单例模式 模板方法模式 工厂模式 代理模式 静态代理 JDK动态代理

  • 设计模式

    单例模式 代理模式 静态代理 jdk动态代理 cglib动态代理 工厂模式 适配器模式 建造者模式 观察者模式

  • Maven项目&Spring AOP基础(一)

    Spring AOP的底层机制就是动态代理。而代理模式又分为:静态代理、动态代理。 静态代理的角色分为:抽象角色 ...

  • JAVA代理模式深入了解(一)

    目前学习阶段,有问题请帮忙指出,谢谢 代理模式有三种: 静态代理模式 jdk动态代理模式 cglib动态代理模式 ...

  • 设计模式~代理模式

    学习代理模式内容: ★ 静态代理、 ★ 动态代理(JDK动态代理、CGLIB动态代理)、 ★ 拦截器的原理和日志记...

  • 代理模式vs装饰模式 and 静态代理vs动态代理

    目录:1.代理模式定义&实现2.装饰模式定义&实现3.静态代理4.动态代理:JDK动态代理、Cglib动态代理5....

  • 说说Java代理模式

    在平时写代码时,经常会用到各种设计模式,其中一种就是代理模式,代理实现可以分为静态代理和动态代理。 静态代理 静态...

网友评论

      本文标题:静态/动态代理模式

      本文链接:https://www.haomeiwen.com/subject/huiqvftx.html