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

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

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 请注意全局变量 result、borrower、loan 和 property,脚本使用这些变量访问和设置共享 Java 对象中的值,动态调用动态语言,第 2 部分: 在运行时寻找、执行和修改脚本(8),这些变量名是通过调用 ScriptEngine.put() 方法设置的,还要注意 resul

请注意全局变量 result、borrower、loan 和 property,脚本使用这些变量访问和设置共享 Java 对象中的值。这些变量名是通过调用 ScriptEngine.put() 方法设置的。

还要注意 result.productName = 'Groovy Mortgage' 这样的 Groovy 语句。这个语句似乎是直接设置 MortgageQualificationResult 对象的字符串属性 productName,但是,清单 3 清楚地说明它是一个私有的实例变量。这并不 表示 Java 脚本编程 API 允许违反封装规则,而是说明通过使用 Java 脚本编程 API,Groovy 和大多数其他脚本语言解释器可以很好地操作共享的 Java 对象。如果一个 Groovy 语句尝试设置或读取 Java 对象的私有属性值,Groovy 就会寻找并使用 JavaBean 风格的公共 setter 或 getter 方法。例如,语句 result.productName = 'Groovy Mortgage' 会自动转换为适当的 Java 语句:result.setProductName("Groovy Mortgage")。这个 Java setter 语句也是有效的 Groovy 代码,可以在脚本中使用,但是直接使用属性赋值语句更符合 Groovy 的风格。

现在看看清单 5 中的 JavaScript 抵押产品脚本。这个 JavaScript 脚本代表一种政府担保的贷款,政府支持这种贷款是为了提高公民的住宅拥有率。所以,业务规则要求这是贷款人购买的第一套住宅,而且贷款人打算在此居住,而不是出租获利。


清单 5. JavaScript 抵押脚本
/** 
 * This script defines the "JavaScript FirstTime Mortgage" product. 
 * It is a government-sponsored mortgage intended for low-income, first-time 
 * home buyers without a lot of assets who intend to live in the home. 
 * Bankruptcies and bad (but not terrible!) credit are OK. 
 */ 
result.productName = 'JavaScript FirstTime Mortgage' 
 
if (!borrower.intendsToOccupy) { 
  result.message = 'This mortgage is not intended for investors.' 
  scriptExit.noMessage() 
} 
if (!borrower.firstTimeBuyer) { 
  result.message = 'Only first-time home buyers qualify for this mortgage.' 
  scriptExit.noMessage() 
} 
if (borrower.monthlyIncome > 4000) { 
  result.message = 'Monthly salary of $' + borrower.monthlyIncome + 
    ' exceeds the $4,000 maximum.' 
  scriptExit.noMessage() 
} 
if (borrower.creditScore < 500) { 
  result.message = 'Your credit score of ' + borrower.creditScore + 
    ' does not meet the 500 requirement.' 
  scriptExit.noMessage() 
} 
 
// Qualifies. Determine interest rate based on loan amount and credit score. 
result.qualified = true 
result.message = 'Congratulations, you qualify.' 
 
if (loan.loanAmount > 450000) { 
  result.interestRate = 0.08 // Big loans and poor credit require higher rate. 
} else if (borrower.creditScore < 550) { 
  result.interestRate = 0.08 
} else if (borrower.creditScore < 600) { 
  result.interestRate = 0.07 
} else if (borrower.creditScore < 700) { 
  result.interestRate = 0.065 
} else { // Good credit gets best rate. 
  result.interestRate = 0.06 
}

上一页  3 4 5 6 7 8 9 10  下一页

Tags:动态 调用 动态

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