资源描述:
《java之架构基础-动态代理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、javaZ架构棊础-动态代理&cglib-编程开发技术java之架构基础-动态代理&cglib原文出处:xieyu_zy本文核心主要参数动态代理和cglib;在以前的文章小,有提及到动态代理,它耍解决的就是,当我们的某些代码前而或后面都需要一些处理的时候,如写FI志、事务控制、做agent.自动化代码跟踪等,此时会给你带來无限的方便,这是JVM级別的提供的一种代理机制,不过在这种机制下调用方法在JVM7岀来前还没有invokeDynamic的时候,调用的效率是很低的,此时方法调用都是通过method的invoke去实现。其基木原
2、理是基于实现JVM提供的一个:InvocationHandler的接口,实现一个方法叫:publicObjectinvoke(Objectproxyed,Methodmethod,Object[]args);创建类的时候,通过实例化这个类(这个类就是实现InvocationHandler的类),再将实际要实现的类的class放进去,通过Proxy來实例化。以卜•为一段简单动态代理的实现代码(以下代码放入一个文件:DynamicProxy.Java):importjava.lang,reflect.InvocationHandle
3、r;importjava.lang,reflect.InvocationTargetException;importjava.lang,reflect.Method;importjava・lerng.reflect・Proxy;//定义了一个接口interfaceHello{publicStringgetTnfosl();publicStringgctlnfos2();publicvoidsetinfo(Stringinfosl,Stringinfos2);publicvoiddisplay();}〃定义它的实现类classIl
4、cllolmplcmcntsimplcmcutsHello{privatevolatileStringinfosl;privatevolatileStringinfos2;publicStringgetlnfosl(){returninfosl;}publicStringgetlnfos2(){returninfos2;}publicvoidsetlnfo(Stringinfosl,Stringinfos2){this.infosl二infosl;this・infos2=infos2;}publicvoiddisplay(){S
5、ystem,out.printin+infosl+〃t〃+infos2);定义AOP的AgentclassAOPFactoryimplernentsTnvocationHandler{privateObjectproxyed;publicAOPFactory(Objectproxyed){this.proxyed=proxyed;}publicvoidprintinfo(Stringinfo,Object...args){System,out.printin(info);if(args二二null){System,out.pr
6、intln(z,t空值。“);}else{for(Objectobj:args){System,out.printin(obj);publicObjectinvoke(Objectproxyed,Methodmethod,Object[]args)throwsT11egalArgumentExcept!on,T11egalAccessException,InvocationTargctExccption{System,out.println(〃==二二〉调用方法名:〃+method.getNameO);Class>
7、[]variables=method.getParameterTypes();for(Class>typevariables:variables){System,out.println(〃二二二二二二二二二二二二二〉〃+typevariables.getName());}printTnfoC,传入的参数为:〃,args);Objectresult=method・invokc(this・proxyed,args);printinfo(z,返回的参数为:",result);printinfo(,z返冋值类型为:",method.
8、getReturnType());returnresult;}}〃测试调用类publicclassDynamicProxy{publicstaticObjectgetBean(StringclassName)throwsInstantiationExceptio