2008-09-27 11 views

Respuesta

6

lo que he entendido:

  1. Tiene un grano (Bean1) con un propiedad llamada "foo"
  2. Usted tiene otro bean (bean2) con una propiedad llamada "propName", que también tiene que tener el mismo "foo" que en bean1.

por qué no hacer esto:

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

esta manera, su Bean2 no está acoplado al Bean1 como en su ejemplo. Puede cambiar bean1 y bean2 sin afectarse entre sí.

Si REALMENTE tiene que hacer la inyección usted propuso, puede utilizar:

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

Creo que tiene que inyectar bean1, luego obtener foo manualmente debido a un problema de temporización. ¿Cuándo el marco resuelve el valor del bean objetivo?

Puede crear un bean de puntero y configurarlo.

class SpringRef { 
    private String targetProperty; 
    private Object targetBean; 

    //getters/setters 

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

Common-BeanUtils debería ser útil.

5

Es necesario utilizar 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

Una sintaxis alternativa utiliza el atributo "id" para establecer el nombre bean destino y la ruta de la propiedad. flicken

Cuestiones relacionadas