《Spring Recipes》第四章筆記2:Injecting Spring Beans i...

《Spring Recipes》第四章筆記2:Injecting Spring Beans into Scripts


問題


須要將Spring中的bean注入到腳本中。

解決方案

使用Setter注入的方式將bean注入到腳本中。

例:假設接口InterestCalculator中使用了RateCalculator接口的實現,InterestCalculator使用腳本實現。
一、定義接口RateCalculator,並實現。
public interface RateCalculator {
public double getAnnualRate();
public double getMonthlyRate();
public double getDailyRate();
}

public class FixedRateCalculator implements RateCalculator {
    private double rate;
    public void setRate(double rate) {
        this.rate = rate;
    }
    public double getAnnualRate() {
        return rate;
    }
    public double getMonthlyRate() {
        return rate / 12;
    }
    public double getDailyRate() {
        return rate / 365;
    }
}

二、註冊FixedRateCalculator。
<bean id="rateCalculator" class="com.apress.springrecipes.interest.FixedRateCalculator">
    <property name="rate" value="0.05" />
</bean>


三、定義接口InterestCalculator。
public interface InterestCalculator {
    public void setRateCalculator(RateCalculator rateCalculator);
    public double calculate(double amount, double year);
}


使用JRuby

實現InterestCalculator接口:
class SimpleInterestCalculator
    def setRateCalculator(rateCalculator)
        @rateCalculator = rateCalculator
    end
    def calculate(amount, year)
        amount * year * @rateCalculator.getAnnualRate
    end
end

配置文件:
<lang:jruby id="interestCalculator" script-source="classpath:com/apress/springrecipes/interest/
SimpleInterestCalculator.rb"
script-interfaces="com.apress.springrecipes.interest.InterestCalculator">
    <lang:property name="rateCalculator" ref="rateCalculator" />
</lang:jruby>


使用Groovy

實現InterestCalculator接口:
class SimpleInterestCalculator implements InterestCalculator {
    RateCalculator rateCalculator
    double calculate(double amount, double year) {
        return amount * year * rateCalculator.getAnnualRate()
    }
}

配置文件:
<lang:groovy id="interestCalculator" script-source="classpath:com/apress/springrecipes/interest/SimpleInterestCalculator.groovy">
    <lang:property name="rateCalculator" ref="rateCalculator" />
</lang:groovy>


使用BeanShell

實現InterestCalculator接口:
RateCalculator rateCalculator;
void setRateCalculator(RateCalculator aRateCalculator) {
    rateCalculator = aRateCalculator;
}
double calculate(double amount, double year) {
    return amount * year * rateCalculator.getAnnualRate();
}

配置文件:
<lang:bsh id="interestCalculator" script-source="classpath:com/apress/springrecipes/interest/SimpleInterestCalculator.bsh"
script-interfaces="com.apress.springrecipes.interest.InterestCalculator">
    <lang:property name="rateCalculator" ref="rateCalculator" />
</lang:bsh>
相關文章
相關標籤/搜索