是否有可能从 Spring 注入在 ref bean 上调用方法的结果?

2022-08-31 13:07:44

是否有可能从 Spring 注入在 ref bean 上调用方法的结果?

我正在尝试将两个独立项目中的一些剪切/粘贴代码重构为一个公共类。在其中一个项目中,代码位于一个我称之为“MyClient”的类中,该类是从Spring实例化的。它注入另一个 spring 实例化类“MyRegistry”,然后 MyClient 类使用该类查找终结点。我真正需要的只是重构类中的终结点字符串,它可以通过 Setter 进行初始化。在重构代码中,我真的不能依赖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)

希望从我试图实现的目标的角度来看,这是有道理的。如果春天有可能这样的事情发生,请告诉我!


答案 1

在Spring 3.0中,通过Spring Expression Language是可能的:

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

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

答案 2

最好的解决方案是使用Spring 3的表达式语言,如@ChssPly76所述,但如果您使用的是旧版本的Spring,它几乎同样简单:

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

推荐