1. ホーム
  2. java

Springからref Beanのメソッド呼び出しの結果を注入することは可能ですか?

2023-09-04 16:41:30

質問

SpringからRef Beanのメソッド呼び出しの結果をインジェクトすることは可能でしょうか?

私は、2つの別々のプロジェクトから共通のクラスにカット/ペーストされたコードをリファクタリングしようとしています。プロジェクトの1つでは、コードは"MyClient"と呼ぶクラス内にあり、それはSpringからインスタンス化されています。このクラスはSpringからインスタンス化された別のクラスである "MyRegistry" にインジェクトされ、MyClientクラスはそのクラスを使ってエンドポイントを探します。私が本当に必要とするのは、リファクタリングされたクラスのエンドポイント文字列だけで、これはセッターを介して初期化することができます。私は本当にリファクタリングされたコードでMyClientからMyRegistryへの依存を持つことはできません。

そこで、私の質問はこれです... MyRegistryクラスで検索された春からのエンドポイント文字列を注入する方法はありますか。だから、私は現在持っています。

<bean id="registryService" class="foo.MyRegistry">
...properties set etc...
</bean>

<bean id="MyClient" class="foo.MyClient">
    <property name="registry" ref="registryService"/>
</bean>

しかし、私は(これは想像上のSpringの構文ですが)

<bean id="MyClient" class="foo.MyClient">
    <property name="endPoint" value="registryService.getEndPoint('bar')"/>
</bean>

ここで、MyRegistry は getEndPoint(Stirng endPointName) メソッドを持つことになります。

私が達成しようとしていることの観点から、これが意味をなすことを願っています。このようなことがSpringで可能かどうか教えてください!

どのように解決するのですか?

一番素敵な解決方法は、@ChssPly76さんが紹介しているSpring 3の式言語を使うことですが、もし古いバージョンのSpringを使っているのであれば、ほとんど同じように簡単にできます。

<bean id="MyClient" class="foo.MyClient">
   <property name="endPoint">
      <bean factory-bean="registryService" factory-method="getEndPoint">
         <constructor-arg value="bar"/>
      </bean>
   </property>
</bean>