我对这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逻辑?
答案 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'] }"/>