我对 Spring 很陌生。我有一个接口(interface)(MessageHandler),它有一个get方法,该方法返回另一个接口(interface)(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>
这里我传递了一个检查列表 - 这是接口(interface)(messageChecker)的实现列表(目前我只有 1 个)
Checkerlist 包含对实际实现的 Bean Id 的引用。
HL7Checker 是接口(interface) messageChecker 的实现。
但是当我运行主程序时,当我注入(inject)bean“messageHandler”并调用getMessageCheckerList时,它返回一个空值。这些 getter 和 setter 方法在不使用 spring 的情况下工作正常。
我不确定问题出在哪里。
最佳答案
我不知道您的烦恼的答案,但我会检查:
- 是二传手
setMessageCheckerList(List)
在messageHandler
bean 叫什么? (使用一些调试器或一些跟踪输出,如System.out...
)。如果不是,则您的 Spring XML 配置设置可能有问题。您发布的 bean 定义需要设置该属性,并且 Spring 不会创建messageHandler
bean 无需设置属性。 - 谁调用
setMessageCheckerList(List)
二传手?或者更准确地说,什么代码写入存储属性值的字段?也许该字段已被 Spring 正确初始化,但被覆盖为null
后来呢? - 您确定要调用
getMessageCheckerList
吗?在 Spring 为您配置的同一个对象上(即messageHandler
bean)。您发布的定义清楚地说明了MessageHandlerImpl
的一个实例由Spring创建,但并不阻止通过其他方式创建其他实例。因此,也许 Spring 创建的实例拥有正确的值,但您运行get...
在错误的实例上?
关于java - Spring 配置文件由实现列表组成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4316911/