java之架构基础-动态代理

java之架构基础-动态代理

ID:30768917

大小:74.50 KB

页数:7页

时间:2019-01-03

java之架构基础-动态代理_第1页
java之架构基础-动态代理_第2页
java之架构基础-动态代理_第3页
java之架构基础-动态代理_第4页
java之架构基础-动态代理_第5页
资源描述:

《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(Classtypevariables: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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。