2011-03-16 109 views
0

当Spring尝试实例化一个实现AbstractSet<Channel>的bean时,会抛出以下异常。收集的Spring bean实例化异常

无法创建集合类型[org.jboss.netty.channel.group.DefaultChannelGroup]副本 - 注射原始集合按原样

<bean id="defaultChannelGroup" class="org.jboss.netty.channel.group.DefaultChannelGroup" scope="prototype"></bean> 

<bean id="client" class="com.menacheri.Client"> 
    <property name="id" value="6"></property> 
    <property name="gameRoomChannelGroup" ref="defaultChannelGroup"></property> 
</bean> 

什么我做错了任何想法?

+0

'Client'的'gameRoomChannelGroup'属性是什么类型? – skaffman 2011-03-16 08:53:23

+0

另外,将一个'prototype'作用域的bean注入到singleton bean中并没有什么意义......您确定要这么做吗? – skaffman 2011-03-16 08:53:59

+0

类型是“ChannleGroup”。该接口由defaultChannelGroup类实现。有不同类型的客户端,每个客户端都有自己的通道组实例。因此,原型。我只在配置中显示了一个客户端定义。 – Abe 2011-03-16 13:58:01

回答

0

Spring 3.0.5似乎有一些更好的错误消息,我找不到你提供的那个。以下是可能的原因(从春源代码错误):

  • Collection of type [] returned null Iterator
  • Cannot access Collection of type [] - injecting original Collection as-is
  • Cannot create copy of Collection type [] - injecting original Collection as-is
  • Collection type [] seems to be read-only - injecting original Collection as-is

然而,尝试包装你试图在注入集合新的,新鲜的,如下:

<bean id="wrappedSet" class="java.util.HashSet"> 
    <constructor-arg> 
     <ref bean="defaultChannelGroup"/> 
    </constructor-arg> 
</bean> 

...而代之以注入wrappedSet。可能帮助,只是一个猜测。

+0

DefaultChannelGroup的类定义就像这样:'public class DefaultChannelGroup extends AbstractSet implements ChannelGroup'。我在我的课程中使用了ChannelGroup功能,因此注入包装并不适合我的情况。 – Abe 2011-03-16 14:04:01

+0

我试过用Spring 3.1并得到以下异常无法创建Collection类型的副本[org.jboss.netty.channel.group.DefaultChannelGroup] - 按原样注入原始集合。 @skaffman @Tomasz Nurkiewicz – Abe 2011-03-16 14:23:48

相关问题