【问题标题】:Spring Config file consisting of List of Implementations由实现列表组成的 Spring Config 文件
【发布时间】:2010-11-30 18:02:55
【问题描述】:

我对 Spring 很陌生。我有一个接口(MessageHandler),它有一个 get 方法,这个方法返回另一个接口(messageChecker)的实现列表。

public interface MessageHandler {
   public void process(BufferedReader br);
   public void setMessageCheckerList(List mcList);
   [B]public List getMessageCheckerList();[/B]
 }

在我的 Spring XML 配置中,我有类似的东西,以及其他 bean

<bean id="messageHandler" class="com.XXX.messagereceiver.MessageHandlerImpl">
  <property name="messageCheckerList" ref="checkerList"/>
 </bean>

 <bean id="checkerList" class="java.util.ArrayList">
  <constructor-arg>
   <list>
    <ref bean="HL7Checker"/>
   </list>
  </constructor-arg>
 </bean>

 <bean id="HL7Checker" class="com.XXX.messagereceiver.HL7CheckerImpl">
     <property name="messageExecutor" ref="kahootzExecutor"/>
 </bean>

我在这里传递了一个检查表 - 这是接口 (messageChecker) 的实现列表(目前我只有 1 个)

Checkerlist 包含对实际实现的 Bean Id 的引用。

HL7Checker 是一个接口 messageChecker 的实现。

但是当我运行主程序时,当我注入 bean“messageHandler”并调用 getMessageCheckerList 时,它返回一个空值。这些 getter 和 setter 方法在不使用 spring 的情况下也能正常工作。

我不确定似乎是什么问题。

【问题讨论】:

    标签: java spring configuration dependency-injection


    【解决方案1】:

    我不知道你的烦恼的答案,但我会检查:

    • 是否调用了messageHandler bean 中的setter setMessageCheckerList(List)? (使用一些调试器或一些跟踪输出,如System.out...)。如果不是,您的 Spring XML 配置设置可能有问题。您发布的 bean 定义需要设置属性,如果不设置属性,Spring 不会创建 messageHandler bean。
    • 谁调用了setMessageCheckerList(List) setter?或者更准确地说,什么代码写入存储属性值的字段?也许该字段已被 Spring 正确初始化,但稍后被覆盖为 null
    • 您确定在 Spring 为您配置的同一个对象(即messageHandler bean)上调用getMessageCheckerList。您发布的定义明确指出 MessageHandlerImpl 的一个实例是由 Spring 创建的,但它不会阻止以其他方式创建其他实例。那么也许 Spring 创建的实例拥有正确的值,但是您在错误的实例上运行 get...

    【讨论】:

    • 感谢 Grzegorz,我已经在我的实现中创建了一个新的消息处理程序。它现在工作正常。
    猜你喜欢
    • 2022-12-04
    • 2016-09-12
    • 2019-09-03
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多