2012-04-16 7 views
36

Potrzebuję zdefiniować wartość ciągu w pliku XML kontekstu źródłowego, który jest współużytkowany przez wiele komponentów bean.Czy istnieje skrót do tworzenia stałej String w pliku XML kontekstu Spring?

To jak to zrobić:

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

Tworzenie fasoli java.lang.String przekazując argument konstruktora java.lang.String wydaje kludgy.

Czy jest skrót?

Wiem, że tę właściwość można przekazać za pomocą PropertyOverrideConfigurer, ale chcę zachować tę właściwość w pliku XML.

Odpowiedz

13

skrót do rozwiązania zaproponowanego przez mrembisz idzie tak:

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

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

Możesz być w stanie korzystać z następujących powodów:

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

jednak, że opiera się na nieruchomości o tej samej nazwie, więc nie mogą być stosowane dla Ciebie.

24

Można użyć PropertyPlaceholderConfigurer i zachować wartości 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> 

Następnie odwołać go z:

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

Czy zwracasz uwagę na to, jak po wykonaniu tej "aSharedProperty" można odwoływać się do tworzenia innych komponentów? (tylko dlatego, że nowi wiosenni przybywający na tę stronę otrzymują tutaj wszystkie szczegóły :)) – akirekadu

+0

Jasne, proszę bardzo. – mrembisz

+0

Zobacz moją odpowiedź poniżej, aby uzyskać notację skróconą, która umożliwia obejście bez wprowadzania właściwości PropertiesFactoryBean. – Kaitsu

3

Coś Użyłem w przeszłości jest Spel, aby upewnić się, że fasola ma taką samą wartość jak inna:

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

Znalazłem to być szczególnie przydatne przy ustalaniu wartości zrobił coś innego niż proste zadanie.

Powiązane problemy