如题

解决方案 »

  1.   

    默认情况下,如果目标对象实现了接口,则是JDK的动态代理,代理实现该接口,动态的编译生成代理对象,动态的加载内存
    如果没有实现接口,这时需要引入CGlib库,实现代理,spring动态的切换,它的原理是
    修改字节码
      

  2.   

    已经说得很清楚了,静态代理是实现了相同的接口,但代理类是已经写好的,一个代理类对应 一个类了..动态代理就不是写好的,只要实现相同的接口,代理类可能不一样(个人观点.)
    整个过程大约是这样的,当一个类实现一个接口,现在需要代理这个类,那就要有一个代理类,实现了MethodInvokiHanlder(名字可能有点出入)这个接口只有一个方法,invoke(),
    接着产生一个代理的类,Proxy.newProxyInstance(ClassLoader,Interfaces,this),这个产生对应接口的代理类,参数是类加载器,就是从你要代理的类获得的和接口也是,这两个是反射得到的.this就是代理类对象.>这个动态产生的.在JDK里比较复杂,他会遍历实现的接口,然后一个一个实现...
    在invoke()里有一个method.invoke(),(method是方法中的参数,你不需要知道是什么东西,直接调用就可以了.)这个是执行你原来类执行的东西了.那在这个方法前后,你想要执行都可以
    SPRING的AOP做的事,关于JDK动态代理差不多也是这样.还有CGLIB没看过.
      

  3.   

    设计模式:proxy
    技术支持:
    1、JDK动态代理 InvocationHandler,Proxy(必须实现接口)
    2、CGlib.jar 第三方代理类实现包(不必实现任何接口)