欢迎来到天天文库
浏览记录
ID:34539971
大小:492.44 KB
页数:13页
时间:2019-03-07
《java编程的动态性(8)用代码生成取代反射》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、中文登录(或注册)技术主题软件下载社区技术讲座搜索developerWorksdeveloperWorks中国Javatechnology文档库Java编程的动态性,第8部分:用代码生成取代反射运行时代码生成为获得最高的性能提供了一种用直接访问取代反射的方法DennisSosnoski(dms@sosnoski.com),总裁发布日期:2004年6月01日级别:初级简介:从本系列前面的文章中,您了解到反射的性能比直接访问要慢许多倍,并了解了用Javassist和ApacheByteCodeEngin
2、eeringLibrary(BCEL)进行classworking。Java顾问访问情况:2114次浏览DennisSosnoski通过演示如何使用运行时classworking,来用全速前进的生成代码取代反射评论:0(查看
3、添加评论登录)代码,从而结束他的Java编程的动态性系列。平均分(2个评分)为本文评分标记本文!既然您已经看到了如何使用Javassist和BCEL框架来进行classworking(请参阅本系列以前的一组文章),我将展示一个实际的内容classworking应用程序。这个应用
4、程序用运行时生成的、并立即装载到JVM的类来取代反射。在综合讨论的过程中,我将引用本系列的前两篇文章,以及对Javassist和BCEL的讨论,这样本文就成为了对这个很长的系列文章的一个很好的总结。参考资料关于作者反射的性能建议在第2部分,我展示了无论是对于字段访问还是方法调用,反射都比直接代码慢很多倍。这种延缓对于许多应用程序来说不算是问题,但是总是会遇到性能非常关键的情况。在这种情况下,反射可能成为真正的瓶颈。但是,用静态编译的代码取代反射可能会非常混乱,并且在有些情况下(如在这种框架中:反射访
5、问的类或者项目是在运行时提供的,而不是作为这一编译过程的一部分提供标签的),如果不重新构建整个应用程序就根本不可能取代。搜索所有标签Classworking使我们有机会将静态编译的代码的性能与反射的灵活性结合起来。这里的基本方法是,在运行时,以一种可以被一般性代码使用的方式,构建一个自定义的类,其中将包装对目标类的访问(以前是通过反射达到的)。将这个自定义类装载到JVM中后,就可以全速运行了。热门文章标签
6、我的文章标签设置阶段清单1给出了应用程序的起点。这里定义了一个简单的bean类HolderBe
7、an和一个访问类ReflectAccess。访问类有一个命令行更多更少参数,该参数必须是一个值为int的bean类属性的名字(value1或者value2)。它增加指定属性的值,然后在退出前打印出这_unassigned125ajax两个属性值。antapacheapiopeninbrowserPROversionAreyouadeveloper?TryouttheHTMLtoPDFAPIpdfcrowd.comantapacheapibest_practic...collections清单1.反射
8、一个beaneclipsegenericgooglehadooppublicclassHolderBeanhibernatei/oibatisj2ee{privateintm_value1;j2ee_(java_2_...j2seprivateintm_value2;j2se_(java_2_...javajava_publicintgetValue1(){技术java_入门javaspringreturnm_value1;javascriptjava技术jettyjsf}publicvoidset
9、Value1(intvalue){jsf_(javaserve...jsp_(javaserve...m_value1=value;jstljunitjvmjvm_(java_virt...}lucenemapreducemavenmvcpublicintgetValue2(){nioscalaservletspringreturnm_value2;sshstrutsstruts2thread}publicvoidsetValue2(intvalue){tomcatvolatilewebweb_服m
10、_value2=value;务web_应用xml安全编码}}标准并发部分:持久性调试publicclassReflectAccess多线程工作原理解析架构模式{publicvoidrun(String[]args)throwsException{开发开放源码理论与实践:if(args.length==1&&args[0].length()>0){模式配置设计模式使用数//createpropertyname据访问数据库和数据管理算法charlead=args[0].c
此文档下载收益归作者所有