2008-09-27 10 views

Odpowiedz

6

Co zrozumiałem:

  1. Masz fasola (bean1) z właściwość o nazwie "foo"
  2. Masz inny Bean (bean2) z właściwość o nazwie „propName” wich również musi mieć taką samą „foo”, który w bean1.

dlaczego tego nie robi:

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

Spowoduje to Twój bean2 nie jest sprzężony bean1 jak w przykładzie. Możesz zmienić bean1 i bean2 bez wzajemnego oddziaływania.

Jeśli NAPRAWDĘ trzeba zrobić zastrzyk Ci zaproponowane, można użyć:

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

Chyba trzeba wstrzyknąć bean1, a następnie uzyskać foo ręcznie powodu problemu rozrządu. Kiedy struktura rozwiązuje wartość docelowego komponentu bean?

Można by utworzyć wskaźnik fasoli i skonfigurować to.

class SpringRef { 
    private String targetProperty; 
    private Object targetBean; 

    //getters/setters 

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

Common-BeanUtils powinny być pomocne.

5

Trzeba użyć 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

składni alternatywny wykorzystuje atrybut „id”, aby ustawić nazwę i ścieżkę docelową fasoli nieruchomości. flicken

Powiązane problemy