答案 0 :(得分:3)
从错误消息中,听起来Spring试图用这个构造函数实例化对象:
public M2000AlarmChannel(String host, int port, String username, String password, MDDComponent componenet)
看起来Spring对使用哪个构造函数感到困惑,可能是因为两个构造函数都有一个MDDComponent
参数(在某种程度上,两个构造函数都将此作为最后一个参数,我很好奇,如果有事情要做使用Spring在确定使用哪个构造函数时使用的逻辑。无论如何......)。
根据Spring manual,您可以添加参数<constructor-arg>
以帮助容器解析要使用的构造函数:
您可以添加“类型”:
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="7500000"/>
<constructor-arg type="java.lang.String" value="42"/>
</bean>
或者您可以添加索引:
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg index="0" value="7500000"/>
<constructor-arg index="1" value="42"/>
</bean>
(如果你真的想,你可以指定两者)
添加其中一个或两个应该有助于Spring解析使用哪个构造函数。
作为推论,如果这没有帮助,你可以简单地改变XML定义来传递另一个构造函数所需的参数,一个Spring试图使用吗?
顺便说一下,在WMD中使用引号标签可能会使你的问题更具可读性。答案 1 :(得分:0)
实际上,我认为确实如此。传递给Jakarta对象的第一个构造函数参数的类型为abc.def.mdd.msg.alarm.huawei.MDDPackagerAlarmM2000,但是ctor需要一个String。使类型匹配正确。
它读作直接的消息。我错过了什么?
我将从包结构中假设那些是你的类。真?
答案 2 :(得分:0)
您是否掌控AlarmChannel
班级?如果是这样,你可以在构造函数中滚动一个具有print语句的新版本(也可以在try-catch
初始化程序中使用static
来获取从初始化类的堆栈跟踪)?
这样,你可能会知道是否涉及重复的课程
同样在Spring配置文件中,您可以使用ClassLoader
打印MethodInvokingFactoryBean
- 这也可能会对此事有所了解?