当前位置: 首页 > 面试题库 >

从Spring可以注入对ref bean调用方法的结果吗?

穆承运
2023-03-14
问题内容

从Spring可以注入对ref bean调用方法的结果吗?

我试图将来自两个单独项目的一些剪切/粘贴的代码重构为一个公共类。在其中一个项目中,代码位于一个我称为“
MyClient”的类中,该类是从Spring实例化的。它被注入另一个弹簧实例化的类“
MyRegistry”,然后MyClient类使用该类来查找端点。我真正需要的只是重构类中的终结点String,可以通过Setter对其进行初始化。我真的不能在重构代码中从MyClient依赖MyRegistry。

所以,我的问题是……有没有办法从MyRegistry类中查找的spring注入端点String。因此,我目前有:

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

从我要实现的目标的角度来看,这是有意义的。请让我知道春季是否可能发生这种情况!


问题答案:

最好的解决方案是使用@ 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>


 类似资料:
  • 这是我的控制器: 这是我访问http://localhost:8080/area/1时得到的: 无法转换“java”类型的值。lang.String'转换为必需的类型'int';嵌套的例外是java。lang.NumberFormatException:对于输入字符串:“asd3333”] 我测试了这个随机返回,只是为了显示发生了什么...该方法首先用请求中的@PathVariable=1调用,然

  • 问题内容: 我知道jython允许我们从任何Java的类文件中调用Java方法,就好像它们是为python编写的一样,但是相反的可能吗? 我已经有很多用python编写的算法,它们在python和jython上都可以很好地工作,但是它们缺少适当的GUI。我计划将GUI与Jav​​a一起使用,并保持python库完整。我无法使用jython或python编写良好的GUI,也无法使用python编写良

  • 在Scala中,我可以使用Guice注入Scalas吗? 例如,我可以在以下对象中注入?

  • 我是Spring异步任务执行的新手,所以如果这听起来像个愚蠢的问题,请原谅我。 我读到,从Spring 3. x开始,在方法级别引入了@Async注释,以便异步调用该方法。我还了解到,我们可以在Spring配置文件中配置ThreadPoolTaskExecator。 我无法理解的是,如何从tak执行器调用@Async注释的方法让我们假设-AsyncTaskExecutor 早些时候,我们经常在课堂

  • 本文向大家介绍是否可以从一个static方法内部发出对非static方法的调用?相关面试题,主要包含被问及是否可以从一个static方法内部发出对非static方法的调用?时的应答技巧和注意事项,需要的朋友参考一下 不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个stati

  • 问题内容: 除了命令行以外,我可以调用Java方法吗? 问题答案: 如果您为JVM语言安装了REPL(Groovy可能需要最少的工作),则可以在REPL提示符下调用Java方法(Groovy的名称为groovysh)。具有一些奇怪的功能(我最不喜欢的一点是,用声明变量并没有达到您的预期),但是它仍然非常有用。Groovy不尊重隐私是一个有趣的功能,因此您可以调用私有方法并检查私有变量的内容。 Gr