以下SpEL表达式究竟是什么?

时间:2014-11-21 16:17:35

标签: java spring spring-mvc spring-el

我对这3个Spring SpEL 示例究竟是做什么产生了疑问:

1)第一个例子:

<bean id="rewardsDb" class="com.acme.RewardsTestDatabase">
    <property name="keyGenerator" value="#{strategyBean.databaseKeyGenerator}" />
</bean>

在我看来,这段代码片段会破坏名为 databaseKeyGenerator 的内部属性(位于 strategyBean bean中)。因此,在这种情况下,SpEL用于访问classica OO逻辑中的特定bean属性。这是真的吗?

2)第二个例子:

<bean id="strategyBean" class="com.acme.DefaultStrategies">
    <property name="databaseKeyGenerator" ref="myKeyGenerator"/>
</bean>

在我看来Spel没有使用,或者我错过了什么?

3)第三个例子:

<bean id="taxCalculator" class="com.acme.TaxCalculator">
    <property name="defaultLocale" value="#{ systemProperties['user.region'] }"/>
</bean> Equivalent

用于注入从属性文件

中获取的属性值

这是正确的还是我遗漏了什么,还是我误解了SpEL逻辑?

1 个答案:

答案 0 :(得分:1)

第一个和第二个例子汇集在一起​​。第二个实际上根本不使用SpEL。其唯一目的是帮助理解第一个。所以你不会错过关于前两个的事情。

对于第三个,systemProperties是一个预定义变量,您可以使用它来访问系统属性。除了标准的VM系统属性之外,您还可以在启动应用程序时访问使用-D传递的那些属性。

在创建bean以引用它们之后,可以使用bean id而不是systemProperties以相同的方式访问属性文件。例如

<util:properties id="appProps" location="classpath:application.properties" />

然后

<property name="propOne" value="#{appProps['some.property'] }"/>