我对以下这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'] }"/>

10-04 13:58