Spring框架 - 类加载器关系

时间:2009-02-16 23:08:59

标签: java spring classloader

3 个答案:

答案 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 - 这也可能会对此事有所了解?