美文网首页
浅析静态代理和动态代理

浅析静态代理和动态代理

作者: heqinglin8 | 来源:发表于2019-06-22 15:52 被阅读0次

代理模式

** 一、概述**

代理是一种模式,提供了对目标对象的间接访问方式,即通过代理访问目标对象。如此便于在目标实现的基础上增加额外的功能操作,前拦截,后拦截等,以满足自身的业务需求,同时代理模式便于扩展目标对象功能的特点也为多人所用。

 二、图形描述

18266625-85b67eb9fefbdff5.png

三、静态代理

静态代理的实现比较简单,代理类通过实现与目标对象相同的接口,并在类中维护一个代理对象。通过构造器塞入目标对象,赋值给代理对象,进而执行代理对象实现的接口方法,并实现前拦截,后拦截等所需的业务功能。
、、、
package cn.com.autohome.testlibrary.proxy;
public interface IPerson {

/**
 * 接口
 */
void eat();

}

package cn.com.autohome.testlibrary.proxy;

public class ManProxy implements IPerson {

IPerson mPerson;
public ManProxy(IPerson person) {
    mPerson = person;
}

@Override
public void eat() {
    System.out.println("先喝口汤······");
    mPerson.eat();
    System.out.println("洗碗·········");
}

}

package cn.com.autohome.testlibrary.proxy;

public class Man implements IPerson {
@Override
public void eat() {
System.out.println(this.getClass().getName() + " 吃饭了。。。。。");
}
}

package cn.com.autohome.testlibrary.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyFactory {
private Object targetObject;
public ProxyFactory(Object targetObject) {
this.targetObject = targetObject;
}

public Object getProxyInstance(){
  return  Proxy.newProxyInstance(
            this.targetObject.getClass().getClassLoader(),
            this.targetObject.getClass().getInterfaces(),
            new InvocationHandler() {
                @Override
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    System.out.println("先喝口汤······动态代理");

                    Object obj = method.invoke(ProxyFactory.this.targetObject, args);

                    System.out.println("洗碗·········动态代理");
                    return obj;
                }
            }
    );
}

}

public class MyClass {
public static void main(String args[]) {
System.out.println("+++++++++++++静态代理 +++++++");
Man man = new Man();

    ManProxy manProxy = new ManProxy(man);
    manProxy.eat();

    System.out.println("+++++++++++++ 动态代理 +++++++");

    IPerson personProxy = (IPerson) new ProxyFactory(new Man()).getProxyInstance();
    personProxy.eat();
}

}
、、、

静态代理的总结

优点:可以做到不对目标对象进行修改的前提下,对目标对象进行功能的扩展和拦截。

缺点:因为代理对象,需要实现与目标对象一样的接口,会导致代理类十分繁多,不易维护,同时一旦接口增加方法,则目标对象和代理类都需要维护。

四、动态代理

动态代理是指动态的在内存中构建代理对象(需要我们制定要代理的目标对象实现的接口类型),即利用JDK的API生成指定接口的对象,也称之为JDK代理或者接口代理。

相关文章

  • 编程常用的设计模式

    动态代理和静态代理 静态代理 动态代理 静态代理与动态代理的区别 JDK中的动态代理和CGLIB 实现动态代理的方...

  • 静态代理、动态代理

    代理分为静态代理和动态代理 按照代理创建的时期,可以分为静态代理和动态代理: (1) 静态代理:由程序员或者...

  • JAVA动态代理的实现方式

    1. 静态代理VS动态代理 代理类可以增强被代理对象的方法。可分为静态代理和动态代理。 1.1 静态代理 静态代理...

  • 浅析静态代理和动态代理

    代理模式 ** 一、概述** 代理是一种模式,提供了对目标对象的间接访问方式,即通过代理访问目标对象。如此便于在目...

  • Spring之代理模式

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

  • Java 代理的实现原理

    一、怎样使用代理 二、代理实现的原理 一、代理分为静态代理和动态代理 静态代理:代理对象获得目标对象的引用 动态代...

  • 带你初识Java的代理模式

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

  • 设计模式之代理模式

    代理分为静态代理和动态代理。 动态代理又包括基于JDK的动态代理、基于CGlib 的动态代理、基于Aspectj实...

  • Java高级主题(五)——动态代理

    代理可以分为静态代理、动态代理,动态代理又可以分为 jvm的动态代理 和 cglib的动态代理。像spring框架...

  • java静态代理与动态代理简单分析

    原链接地址 1、动态代理(Dynamic Proxy) 代理分为静态代理和动态代理,静态代理是在编译时就将接口、实...

网友评论

      本文标题:浅析静态代理和动态代理

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