2008-09-27 5 views

Répondre

6

Ce que je compris:

  1. Vous avez un haricot (Bean1) avec une propriété appelée "foo"
  2. Vous avez un autre bean (bean2) avec une propriété nommée "propName", qui doit également avoir le même "foo" que dans bean1.

pourquoi ne pas le faire:

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

Faire cela, votre Bean2 n'est pas couplé à Bean1 comme dans votre exemple. Vous pouvez changer bean1 et bean2 sans affecter les uns les autres.

Si vous vraiment besoin de faire l'injection vous proposiez, vous pouvez utiliser:

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

Je pense que vous devez injecter bean1, puis obtenir manuellement foo en raison d'un problème de synchronisation. Quand le framework résout-il la valeur du bean cible?

Vous pouvez créer un bean pointeur et le configurer.

class SpringRef { 
    private String targetProperty; 
    private Object targetBean; 

    //getters/setters 

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

Common-BeanUtils devrait être utile.

5

Vous devez utiliser 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

Une autre syntaxe utilise l'attribut « id » pour définir le nom de haricot cible et le chemin de la propriété. flicken