2011-03-16 97 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