我对以下这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逻辑?
最佳答案
第一个例子和第二个例子在一起。第二个实际上根本不使用SpEL。其唯一目的是帮助理解第一个。因此,您不会缺少有关前两个方面的东西。
对于第三个,systemProperties是预定义的变量,您可以使用它来访问系统属性。除了标准的VM系统属性之外,您还可以在启动应用程序时访问通过-D传递的属性。
创建bean来引用属性文件后,可以使用bean id而不是systemProperties来访问属性文件。例如
<util:properties id="appProps" location="classpath:application.properties" />
然后
<property name="propOne" value="#{appProps['some.property'] }"/>