2012-06-13 4 views
1

Je suis assez nouveau pour Spring et j'ai besoin d'un bean qui a deux propriétés - dont la seconde est un bean en ligne qui fait référence à la première propriété. Quelque chose comme ceci:Configuration de Spring Bean pour réutiliser ses propres propriétés?

<bean id="aBean" class="com.sample.Bean"> 
    <property name="propertyOne" value="something" /> 
    <property name="propertyTwo"> 
     <bean class="com.sample.AnotherBean"> 
      <property name="propertyThree" ref="propertyOne /> 
     </bean> 
    </property> 
</bean> 

Faire propertyOne son propre haricot est pas une option ici. Quel serait le meilleur moyen d'accomplir cela? Merci!

Répondre

1

La seule façon que je peux penser serait de créer un haricot pour votre propriété commune et se référer à cette propriété commune à la fois Bean et AnotherBean - une raison pour laquelle ce n'est pas une option pour vous? Tout autre moyen ne fonctionnerait pas, à cause du graphe de dépendance - aBean dépend d'un autre bean et ainsi AnotherBean serait instancié avant aBean et ne pourrait pas se référer à une propriété de bean enfant.

S'il n'y avait pas eu cette dépendance, vous auriez pu utiliser Spring-EL pour faire référence à la propriété:

<property name="propertyThree" value="${aBean.propertyOne}"/> 
+0

Voilà comment je contournait le problème. J'avais espéré que Spring offrirait une solution plus élégante, mais si l'application sur laquelle je travaillais était moitié aussi élégante que Spring, je n'aurais pas ce problème en premier lieu. – Michael

1

Vous pouvez créer « propertyOne » comme un haricot séparé.

et de faire référence à partir de aBean et de votre bean en ligne.

<bean id="propertyOne" class="java.lang.String"> 
    <constructor-arg><value>"blabla"</value></constructor-arg> 
</bean> 

<bean id="aBean" class="com.test.SimpleBean"> 
<property name="name" ref="firstProperty" /> 
<property name="newBean"> 
    <bean class="com.test.OtherSimplwBean"> 
     <property name="otherName" ref="propertyOne" /> 
    </bean> 
</property> 

+1

Merci pour la réponse. Malheureusement, cela ne va pas être une option dans ma demande, comme mentionné dans ma question. – Michael

Questions connexes