有一个在Spring上下文XML文件中创build一个string常量的简写?
我需要在由多个bean共享的Spring上下文XML文件中定义一个string值。
这是我如何做到的:
<bean id="aSharedProperty" class="java.lang.String"> <constructor-arg type="java.lang.String" value="All beans need me :)"/> </bean>
通过传递一个java.lang.String的构造函数参数来创build一个java.lang.String bean似乎是kludgy。
有没有捷径?
我知道这个属性可以使用PropertyOverrideConfigurer传递,但我想保留在XML文件中的这个属性。
对mrembisz提出的解决scheme的简写如下所示:
<context:property-placeholder properties-ref="myProperties"/> <util:properties id="myProperties"> <prop key="aSharedProperty">All beans need me :)</prop> </util:properties>
您可以使用PropertyPlaceholderConfigurer
并保留xml中的值:
<context:property-placeholder properties-ref="myProperties"/> <bean id="myProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="properties"> <props> <prop key="aSharedProperty">All beans need me :)</prop> </props> </property> </bean>
然后你参考它:
<bean id="myBean" class="my.package.MyClass"> <property name="someField" value="${aSharedProperty}"/> </bean>
您可能能够使用以下内容:
<bean id="abstractParent" abstract="true"> <property name="sharedProperty" value="All child beans need me" /> </bean> <bean id="bean1" class="MyClass1" parent="abstractParent"> ...non-shared properties... </bean> <bean id="bean2" class="MyClass2" parent="abstractParent"> ...non-shared properties... </bean>
但是,这依赖于同名的财产,所以可能不适用于你。
过去我使用的是SpEL来确保一个bean具有与另一个bean相同的值:
<bean id="myBean" class="xxx.yyy.Foo" > <property name="myProperty" value="1729" /> </bean> <bean id="copyCat" class="xxx.yyy.Bar" > <property name="anotherProperty" value="#{myBean.myProperty}" /> </bean>
当设置值做了一些简单的赋值之外,我发现这是特别有用的。