WEB开发网
开发学院软件开发Java 动态调用动态语言,第 2 部分: 在运行时寻找、执行... 阅读

动态调用动态语言,第 2 部分: 在运行时寻找、执行和修改脚本

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 这个类相当简单,因为它把所有业务决策任务都委派给了外部脚本,动态调用动态语言,第 2 部分: 在运行时寻找、执行和修改脚本(3),每个脚本表示一个抵押产品,每个脚本文件中的代码包含一系列业务规则,qualifyMortgage() 将返回这个共享对象,脚本使用 result 全局变量访问这个 J

这个类相当简单,因为它把所有业务决策任务都委派给了外部脚本。每个脚本表示一个抵押产品。每个脚本文件中的代码包含一系列业务规则,这些规则定义了符合这种抵押产品要求的贷款人类型、资产类型和贷款类型。由于采用了这种方式,只需在脚本目录中添加新的脚本文件,就可以添加新的抵押产品。如果某一抵押产品的业务逻辑改变了,那么只需更新脚本来反映规则的变化。

通过用脚本语言编写抵押产品业务规则,可以展示 Java 脚本编程 API 的功能。这个程序还说明有时候脚本语言代码更容易阅读、修改和理解,即使是非程序员也可以掌握脚本代码。

ScriptMortgageQualifier 类的工作方式

ScriptMortgageQualifier 中的主要方法是 qualifyMortgage()。这个方法通过参数接受以下信息:

贷款人

要购买的资产

贷款细节

一个 File 对象,其中包含要执行的脚本

这个方法的任务是用业务实体参数运行脚本文件并返回一个结果对象,这个对象指出贷款人是否符合抵押产品的要求。这里没有给出 Borrower、Property 和 Loan 的代码。它们只是简单的实体类,可以在本文的源代码中找到它们的代码(见 下载)。

为了找到一个 ScriptEngine 来运行脚本文件,qualifyMortgage() 方法使用了 getEngineForFile() 内部 helper 方法。getEngineForFile() 方法使用 scriptEngineManager 实例变量(这个变量在类实例化时被设置为一个 ScriptEngineManager)寻找能够处理具有给定文件扩展名的脚本的脚本引擎。getEngineForFile() 方法使用 ScriptEngineManager.getEngineByExtension() 方法(见 清单 1 中的粗体代码)搜索并返回 ScriptEngine。

找到脚本引擎之后,qualifyMortgage() 将它接收的实体参数绑定到引擎的上下文,从而让脚本能够使用这些参数。前三个 scriptEngine.put() 调用(也是粗体代码)执行这些绑定。第四个 scriptEngine.put() 调用创建一个新的 MortgageQualificationResult Java 对象并通过脚本引擎共享它。脚本可以通过设置这个对象的属性将它的运行结果返回给 Java 应用程序,qualifyMortgage() 将返回这个共享对象。脚本使用 result 全局变量访问这个 Java 对象。每个脚本负责使用这个共享对象将自己的结果返回给 Java 应用程序。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:动态 调用 动态

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接