Hoe kan jy toegang tot 'n eiendom van 'n boontjie vir lees in 'n lente xml opstelling lêer?

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

  •  02-07-2019
  •  | 
  •  

Vra

Ek wil iets soos die volgende in die lente te doen:

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

Ek sou dink dat dit sou toegang tot die metode getFoo () van bean1 en noem die metode setPropName () van bean2, maar dit beteken nie lyk om te werk.

Was dit nuttig?

Oplossing

Wat ek verstaan:

  1. Jy het 'n boontjie (bean1) met 'n eiendom bekend as "cat"
  2. Jy het 'n ander boontjie (bean2) met 'n eiendom met die naam "propName", daaronder ook moet dieselfde "cat" wat in hê bean1.

waarom nie om dit te doen:

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

Deur dit te doen, is jou bean2 nie gekoppel aan bean1 soos in jou voorbeeld. Jy kan bean1 en bean2 verander sonder dat mekaar.

As jy regtig moet die inspuiting jy voorgestel het, kan jy gebruik:

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

Ander wenke

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

Ek dink jy moet bean1 spuit, dan kry foo hand vanweë 'n timing. Wanneer vind die raamwerk op te los die waarde van die teiken boontjie?

Jy kan 'n wyser boontjie skep en instel nie.

class SpringRef {
  private String targetProperty;
  private Object targetBean;

  //getters/setters

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

Common-BeanUtils moet nuttig wees.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top