2008-09-27 4 views

Antwort

6

Was ich verstanden:

  1. Sie haben eine Bohne (Bean1) mit einer Eigenschaft namens "foo"
  2. Sie haben eine andere Bohne (Bean2) mit einer Eigenschaft namens "propName", die auch haben muss die gleiche "foo", dass in Bean1.

, warum dies nicht tun:

<beans> 
... 
<bean id="foo" class="foopackage.foo"/> 
<bean id="bean1" class="foopackage.bean1"> 
    <property name="foo" ref="foo"/> 
</bean> 
<bean id="bean2" class="foopackage.bean2"> 
    <property name="propName" ref="foo"/> 
</bean> 
.... 
</beans> 

dies tun, Ihr Bean2 ist nicht gekoppelt wie in Ihrem Beispiel Bean1. Sie können bean1 und bean2 ändern, ohne sich gegenseitig zu beeinflussen.

Wenn Sie wirklich die Injektion tun müssen, um Ihnen vorgeschlagen, können Sie verwenden:

<util:property-path id="propName" path="bean1.foo"/> 
-2

Ich denke, Sie müssen Bean1 injizieren, dann erhalten Sie foo manuell wegen eines Timing-Problems. Wann löst das Framework den Wert der Ziel-Bean auf?

Sie könnten eine Zeiger-Bean erstellen und diese konfigurieren.

class SpringRef { 
    private String targetProperty; 
    private Object targetBean; 

    //getters/setters 

    public Object getValue() { 
    //resolve the value of the targetProperty on targetBean. 
    } 
} 

Common-BeanUtils sollte hilfreich sein.

5

Sie müssen verwenden PropertyPathFactoryBean:

 
    <bean id="bean2" depends-on="bean1"> 
     <property name="propName"> 
      <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> 
       <property name="targetBeanName" value="bean1"/> 
       <property name="propertyPath" value="foo"/> 
      </bean> 
     </property> 
    </bean> 
+0

Eine alternative Syntax verwendet das Attribut „id“ die Ziel Bean Namen und Eigenschaft Pfad zu setzen. flicken

Verwandte Themen