¿Cómo se accede a una propiedad de un bean para leer en un archivo de configuración xml de spring?

StackOverflow https://stackoverflow.com/questions/142740

  •  02-07-2019
  •  | 
  •  

Pregunta

Quiero hacer algo como lo siguiente en primavera:

<beans>
    ...
    <bean id="bean1" ... />
    <bean id="bean2">
        <property name="propName" value="bean1.foo" />
...

Pensaría que esto tendría acceso al método getFoo () de bean1 y llamaría al método setPropName () de bean2, pero esto no parece funcionar.

¿Fue útil?

Solución

Lo que entendí:

  1. Tienes un bean (bean1) con un propiedad llamada " foo "
  2. Tienes otro bean (bean2) con un propiedad denominada " 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>

Al hacer esto, su bean2 no está acoplado a bean1 como en su ejemplo. Puede cambiar bean1 y bean2 sin afectarse entre sí.

Si REALMENTE necesita hacer la inyección que propuso, puede usar:

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

Otros consejos

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

Creo que tienes que inyectar bean1, y luego obtener foo manualmente debido a un problema de tiempo. ¿Cuándo resuelve el marco el valor del bean objetivo?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top