7

春に次のようなことをしたい:

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

これは bean1 の getFoo() メソッドにアクセスし、bean2 の setPropName() メソッドを呼び出すと思いますが、これは機能していないようです。

4

3 に答える 3

7

私が理解したこと:

  1. 「foo」というプロパティを持つBean(bean1)があります
  2. 「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"/>
于 2008-09-27T02:39:28.870 に答える
5

PropertyPathFactoryBeanを使用する必要があります。

    <bean id="bean2" depends-on="bean1">
        <プロパティ名="propName">
            <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
                <property name="targetBeanName" value="bean1"/>
                <property name="propertyPath" value="foo"/>
            </bean>
        </プロパティ>
    </bean>
于 2008-09-27T02:30:40.563 に答える
-2

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が役立つはずです。

于 2008-09-27T02:15:37.447 に答える