- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE
PAGE 1
使用代码动态生成技术提升Java程序灵活性
摘要:代码动态生成是指在程序运行时根据实际情况即时生成需要的类代码。它可以提高程序的灵活性,已被用于很多应用架构、脚本语言的实现中。为帮助学生掌握代码动态生成技术,探讨了相关技术的实现方法、工具的应用和教学思路。
关键词:代码动态生成;Java虚拟机;Java类文件;Bytecode;ASM
中图分类号:TP311文献标志码:A文章编号:1006-8228(2013)05-07-03
UsingcodedynamicgenerationtoenhancetheflexibilityofJavaprograms
YanZhonglin
(Collegeofinformation,mechanicalandelectricalengineering,ShanghaiNormalUniversity,Shanghai200234,China)
Abstract:Codedynamicgenerationisdefinedasclasscodegeneratedinstantlyaccordingtotheactualneedswhentheprogramisrunning.Itenhancestheflexibilityoftheprogram,soithasbeenusedinmanyframeworkandscriptinglanguageimplementations.StudentswhoarefamiliarwithJava,JVMmechanismandJavaclassfilestructurewillmasterthistechniqueeasily.Itisbeneficialforthemtolearnnewconceptsandnewprogrammingmodelsbasedonthistechnology,whichhelpthembuildmoreefficient,flexibleandinnovativeapplicationprojects.Theimplementationmethods,toolsandteachingconsiderationsarediscussed.
Keywords:codedynamicgeneration;JVM;Javaclassfiles;Bytecode;ASM
0引言
Java程序是通过JVM(Java虚拟机)运行的,JVM屏蔽了底层硬件和操作系统的差异,提供了一个统一的处理平台。JVM根据类文件执行运算,类文件含有数据定义和处理代码,是Java程序的基本表示形式。程序中各个类文件分开存储,运行时按需装载链接,这一点和C++等其他语言不同。C++在编译时就组合所有类,形成一个完整的可运行文件,而Java要直到运行时才动态组合,完成链接。
通常,类文件是由编译器根据源文件自动生成,由JVM在运行时直接装载的。但这不是获得和使用它的惟一方法,某些情况下可以进行更巧妙的处理。比如在运行时绕过源文件直接生成需要的代码,或者在装载时直接修改类文件,即时改变它的行为,这就是类代码动态生成技术。
类代码动态生成技术需要直接在JVM的汇编语言——bytecode上展开工作。由于JVM模型和指令系统相对简单,类文件有定义明确的格式和语义,成员描述、与其他类的关联都基于符号引用,非常易于理解和修改,这都降低了直接处理它们的难度。这种类文件分开存储、按需装载的机制,也易于在运行时根据具体情况动态生成、替换某个特殊代码段。这使我们有了在运行时改变程序行为的“魔力”,可以突破Java的某些限制,完成它本来无法实现的任务。
例如,作为静态语言的Java,所有的域名、方法名都必须在编程时确定,有时这会限制程序的灵活性。虽然Java引入了“反射”机制以弥补此缺陷,但它的运行效率与正常代码相差很多,将它应用于高频执行的核心部分是不可接受的,这时就希望用即时生成的、可高效执行的代码进行替换。再比如,面向方面编程的实现需要在方法调用前后“编织”入横切操作,这可以在编译时进行,但如果能在运行时动态地插入这些代码,无疑更具灵活性。对象/关系映射也与此类似,需要能即时生成与关系数据库结构相对应的数据对象。这些都离不开代码动态生成技术。
为适应技术的发展潮流,许多学校都开设有关Java高端应用的课程,如JavaEE,若干轻型架构,一些新型脚本语言等,它们会引入许多新概念和编程模式,如AOP、IOC、ORM等。要使学生切实领会和掌握这些抽象而微妙的内容,只作表面上的介绍往往是不够的,应更深入地讲解内部实现机制,使学生知其然,也知其所以然。如果做一些核查,可以发现很多内容都离不
您可能关注的文档
最近下载
- 2024-2025学年福建省厦门市双十中学思明分校九年级(上)第一次月考物理试卷+答案解析.pdf VIP
- 2025年全国电力安全生产与应急管理知识网络竞赛题库(含答案).docx VIP
- 九年义务教全日制初级中学物理教学大纲(试用修订版).doc VIP
- 2024浙ST19壁挂式轻便消防水龙及室内消火栓安装.pptx VIP
- 破产案件管理人工作手册及操作指引.docx VIP
- 重症护理管理及专科技术新进展题库答案-2025年华医网继续教育答案.docx VIP
- 2025年静脉血栓栓塞症(VTE)的诊断与治疗 .pdf VIP
- 顶管工程危险源辨识与控制定稿版.docx VIP
- 静脉血栓栓塞症VTE的诊断和治疗.pptx VIP
- 2025年全国电力安全生产知识网络竞赛题库及答案.docx VIP
文档评论(0)