2012-04-16 12 views
36

I necesidad de definir un valor de cadena en el archivo XML contexto de Primavera que es compartida por varios granos.¿Hay una abreviatura para crear una constante de cadena en el archivo XML de contexto Spring?

Así es como lo hago:

<bean id="aSharedProperty" class="java.lang.String"> 
    <constructor-arg type="java.lang.String" value="All beans need me :)"/> 
</bean> 

Creación de un grano de java.lang.String pasando un argumento del constructor de java.lang.String parece kludgy.

¿Hay un atajo?

sé esta propiedad puede transmitirse utilizando PropertyOverrideConfigurer, pero quiero mantener esta propiedad dentro del archivo XML.

Respuesta

13

una taquigrafía a la solución propuesta por mrembisz es la siguiente:

<context:property-placeholder properties-ref="myProperties"/> 

<util:properties id="myProperties"> 
    <prop key="aSharedProperty">All beans need me :)</prop> 
</util:properties> 
4

Es posible que pueda utilizar el siguiente:

<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> 

Sin embargo, que se basa en la propiedad que tienen el mismo nombre, por lo que pueden no ser aplicables para usted.

24

Puede utilizar PropertyPlaceholderConfigurer y mantener los valores en 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> 

A continuación se hace referencia con:

<bean id="myBean" class="my.package.MyClass"> 
    <property name="someField" value="${aSharedProperty}"/> 
</bean> 
+1

Te importa señalar cómo después de hacer esto "aSharedProperty" puede hacer referencia a la creación de otros granos? (solo para que los novatos de primavera que lleguen a esta página obtengan todos los detalles aquí :)) – akirekadu

+0

Claro, ahí lo tienen. – mrembisz

+0

Consulte mi respuesta a continuación para obtener una notación abreviada que permita prescindir de PropertiesFactoryBean. – Kaitsu

3

Algo que he usado en el pasado es SpEL para asegurarse de que un grano tiene el mismo valor que otra:

<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> 

he encontrado que esto es particularmente útil cuando se ajusta el valor hizo algo que no sea una simple tarea.

Cuestiones relacionadas