黑马程序员_动态代理

来源:互联网 发布:vb format函数怎么用 编辑:程序博客网 时间:2024/06/05 16:59

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------


如果仅仅是对动态代理的操作并不困难,难得是理解其背后的原理,如invocation内调用proxy的原因,谁调用的invoke方法,目标对象方法如何产生等等。这些都需要看源代码或咨询他人才能弄懂,这里先记录下动态代理的一般操作方法。

动态代理的基本应用如下代码:

package proxy;

import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

importjava.util.ArrayList;

importjava.util.Collection;

import java.util.Iterator;

 

public class proxyDemo {

 

       publicstatic void main(String[] args) throws Exception {

      

              //利用Proxy的静态方法newProxyInstance创建代理对象

              Collectionproxy=(Collection)Proxy.newProxyInstance(

                            //类加载器为接口的类加载器

                            Collection.class.getClassLoader(),

                            //接口集合中传入Collection接口

                            newClass[] {Collection.class},

                            //创建InvocationHandler匿名对象

                            newInvocationHandler() {

                                   //创建目标对象

                                   ArrayListtarget=new ArrayList();

                                   @Override

                                   publicObject invoke(Object proxy, Method method, Object[] args)

                                                 throwsThrowable {

                                          //调用的方法指向目标,另可以在方法前,方法后,方法前后和异常处理catch模块中加入代码

                                          ObjectreturnVal=method.invoke(target, args);

                                          returnreturnVal;

                                   }

                            });

              //利用代理调用目标的方法目标中添加元素

              proxy.add("abc1");

              proxy.add("abc2");

              proxy.add("abc3");

              proxy.add("abc4");

              //利用代理,调用目标的迭代器方法,对目标中的元素进行迭代打印

              Iteratorit=proxy.iterator();

              while(it.hasNext()){

                     Objectobj=it.next();

                     System.out.println(obj);

              }

       }

}

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------


0 0