计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

利用JSR-223改进Spring框架的动态语言支持(1)

2014-09-14 01:45
导读:计算机应用论文论文,利用JSR-223改进Spring框架的动态语言支持(1)在线阅读,教你怎么写,格式什么样,科教论文网提供各种参考范例: 摘 要 动态语言支持是Spring框架2.0版本的新功能,而Java平台中的
摘 要 动态语言支持是Spring框架2.0版本的新功能,而Java平台中的动态语言支持直到JDK6版本才有基本实现。本文首先从Spring的工作原理入手分析其实现动态语言支持的静态结构,引入JSR-223提出的动态语言支持框架并与IoC特性结合起来,利用两者的优势改进Spring有限的动态语言支持能力,通过一个应用实例说明了实现方法和应用前景。 关键词 动态语言; Spring2.0 ;控制反转; JSR-2231 引言 在Java语言中提供对动态语言的支持,其初衷来自于使用动态语言访问Java平台中的信息,并且可以在Java平台的应用服务器中运行动态语言编写的页面,但纯粹使用Java语言实现的动态语言引擎为Java程序员结合动态语言编程造成了很大不便:不同动态语言引擎具有不同的应用程序编程接口,不同的动态语言资源需要分别管理等等。2006年10月Spring2.0版本的发布更是在版本1的基础上提供了更加丰富的特性和可扩展性支持,本文将从2.0版本的可扩展的XML配置特性和动态语言支持入手分析其实现原理,对后者的实现进行改进,并利用JSR-223以新的方式更加简洁地为在Java环境中使用动态语言提供强大的功能和特性。2 Spring工作原理与动态语言支持2.1 IoC容器 Interface21公司推出的Spring开发框架(以下简称Spring)经过开放源代码社区和众多项目的应用和实际检验,历经多个版本的发展,已经成长为使用开源技术开发J2EE应用的事实标准。Spring运用“控制反转(以下缩写为IoC)”和“面向方面编程”(以下缩写为AOP)的理念,在正规的设计模式和一整套最佳实践的支持下,为普通Java对象提供了包括轻量级IoC容器、AOP支持、声明式事务、对象-关系模型映射、J2EE集成工具、Web开发框架集成工具和基本的MVC实现等7个主要方面的特性和服务。IoC的概念最早来自于2004年Martin Fowler提出的一种组件装配模式,其核心观点是将组件的配置与使用分开[1]。Spring的IoC容器提供这样一种功能:为那些组成应用程序的主体和其他需要由容器管理的对象(称为bean)提供实例化、定位、配置支持,并通过容器核心接口org.springframwork.beans.factory. BeanFactory的多个实现的支持,描述并建立并管理这些对象之间的依赖关系。最常见的方式是通过XML配置元数据来对容器管理的bean进行定义,通过Setter注入和构造器注入两种主要的依赖注入方式实现bean之间的依赖管理,从而实现高层次的松耦合。Spring2.0版本为元数据的XML配置方式提供基于XML Schema的“自定义标签”功能,即通过第三方命名空间将自定义bean的配置引入IoC容器的元数据配置,在应用程序开发中更好的融合Spring的IoC功能。2.2 动态语言支持 动态类型语言的优点在于方便阅读,不需要写非常多的类型相关的代码,但是不方便调试,命名不规范时往往难于理解;而静态类型语言则具有结构非常规范,便于调试,方便类型安全等优点,缺点是为此需要写更多的类型相关代码,导致不便于阅读。诸如Javascript, Ruby等动态语言具有动态类型、解释执行等优点,并且在多个领域中具有独特的优势,在Java语言中提供对动态语言的支持,其初衷来自于使用动态语言访问Java平台中的信息,并且可以在Java平台的应用服务器中运行动态语言编写的页面。此需求后来形成名为JSR-223的请求正式提交至Java社区[2],目前已经形成以javax.script命名的一套编程接口,并且Java社区为多种不同动态语言提供了该接口的参考实现,其中对Javascript的支持目前直接包含在JDK6的正式版本中。 javax.script包中一整套编程接口的设计目的在于定义动态语言支持框架,为多种动态语言的支持提供统一的访问方式,并且以可插入的方式支持动态语言引擎。包括Mozilla.org基金会提供Javascript支持的Rhino引擎[3],sun公司提供Ruby支持的JRuby引擎等等。3 动态语言集成框架比较3.1 Spring2.0 目前Spring2.0提供的动态语言支持框架由一个抽象工厂接口及其实现和多个根据脚本引擎定制的工具类组成,其静态结构如图所示。图1 Spring2.0的动态语言支持框架类图 核心接口ScriptFactory定义创建动态语言实现bean的getScriptedObject方法,以及构造工厂实例所需的脚本资源和Java接口(Spring要求开发者编写的动态语言必须实现至少一个Java接口),其含义是任何一种可以被IoC容器支持的动态语言必须具有Java的类型特性并且以对象实例为单位被容器管理,才能获得容器提供的特性。目前ScriptFactory接口的实现只有3个,分别提供Bsh,Groovy和Ruby语言的支持[3]。 结合Spring提供的XML元数据配置的可扩展性,从对ScriptBeanDefinitionParser类的代码分析可以看出,IoC容器通过如下步骤注册动态语言实现的bean对象: ①在IoC容器中创建一个ScriptFactoryPostProcessor类型的对象实例作为基础设施获取注入依赖能力; ②获取脚本代码片断; ③为ScriptFactory实例配置基本属性;包括刷新脚本资源的时间间隔、指定构造方法等等; ④解析元数据配置中注入的属性。 通过如上步骤,IoC中采用动态语言支持的bean定义就与其他Java语言构造的bean定义没有本质区别了。Spring的优点在于可以通过注入依赖的方式,使用动态语言编写bean实现,和其他Java对象毫无差别的轻易获取Spring提供的各项特性支持。包括在bean的一个生命周期内修改其实现逻辑、简化实现步骤、减少代码规模等等。3.2 JSR-223 根据JSR-223的动态语言支持框架定义,javax.script包中的静态结构如图2所示。
上一篇:基于JPEG 2000的医学图像ROI压缩(1) 下一篇:没有了