我们如何访问bean的属性以读取spring xml配置文件?

时间:2020-03-06 14:48:58  来源:igfitidea点击:

我想在春季做类似以下的事情:

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

我认为这将访问bean1的getFoo()方法并调用bean2的setPropName()方法,但这似乎不起作用。

解决方案

我认为我们必须注入bean1,然后由于时间问题手动获取foo。框架何时解析目标bean的值?

我们可以创建一个指针bean并进行配置。

class SpringRef {
  private String targetProperty;
  private Object targetBean;

  //getters/setters

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

Common-BeanUtils应该会有所帮助。

我们需要使用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>

我的理解:

  • 我们有一个具有名为" foo"的属性的bean(bean1)
  • 我们还有另一个具有名为" propName"的属性的bean(bean2),它也必须具有与bean1中相同的" foo"。

为什么不这样做:

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

这样,bean2就不会像示例中那样与bean1耦合。我们可以更改bean1和bean2,而不会互相影响。

如果我们确实需要进行建议的注射,则可以使用:

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