静态代理与动态代理的区别??

解决方案 »

  1.   

    动态代理gril  want to kiss boy  need  middle ren introduce .
      

  2.   

    http://blog.csdn.net/daryl715/archive/2007/09/07/1775482.aspx
      

  3.   

    1.先看一段静态代理的代码: 
    //定义接口 public interface HelloWorld{  public void print();}//定义实现接口的类Public HelloWorldImpl implements HelloWorld{Public void print(){System.out.println("Hello World!");}} //定义静态代理实现接口Public staticProxy implements HelloWorld{Public HelloWorld helloWorld;Public staticProxy(HelloWorld helloWorld ){This.helloWorld=helloWorld;}Public void print(){System.out.print("Welcome!!");helloWorld.print();}} //测试静态代理Public class TestStaticProxy{Public static void main(String[] args){
    HelloWorld helloWorld=new HelloWorldImpl();StaticProxy staticPro=new staticProxy(helloWorld);StaticPro.print();}}2.静态代理的缺点如果接口添加一个新的方法,所有的实现类和代理类都要做这个实现,这就增加了代码的复杂度,而动态代理就可以解决这个问题。3.动态代理3.1 动态代理和静态代理相比较,最大的好处就是接口中声明的所有的方法都被转移到一个集中的方法中去处理,这样在接口中声明的方法比较多的情况下我们可以进行灵活处理,而不需要像静态代理那样每一个方法进行中转。3.2 动态代理只能代理接口,代理类都需要实现InvocationHandler类,实现invoke方法。该invoke方法就是调用被代理接口的所有方法时需要调用的,该invoke方法的返回值是被代理接口的一个实现类。下面先看一段关于动态代理的代码:Public  class DynamicProxy implements InvocationHandler{Private Object object;Public Object  bindRelation(Object object ){This.object =object;Return Proxy.newProxyInstance(object. getClass_r(). getLoader_r(),object. getClass_r(). getInterfaces_r(),this);} Public Object  invoke(Object object,Method method,Object[] args) throws Throwable{System.out.print("Welcome");
    Object  result=method.invoke(object,args);Return result ;}} //测试动态代理Public class DynamicProxy{Public static void main(String[] args){HelloWorld  helloWorld=new HelloWorldImpl();DynamicProxy dynamicPro=new DynamicProxy();HelloWorld helloWorld1=(HelloWorld)dynamicPro.bindRelation(helloWorld);helloWorld1.print();}}
      

  4.   

    动态代理不就是java多态的核心么.
      

  5.   

    not  middle ren !!!
      

  6.   

    静态代理就是面向对象中的代理模式,使用面向对象的方式实现代理对象,这个代理对象的类是自己手工编写的。动态代理是编程语言根据代理规则自动生成代理类,并产生代理对象。常用的动态代理有 JDK Proxy 和 cglib。JDK Proxy 是在运行时产生代理类的字节码,再由类加载器加载这些字节码然后创建代理对象。
    Cglib 是使用一种叫做 ASM 的字节码工具,由程序的方式产生字节码。