1

正常に動作するように見える非常に単純なことを試みていますが、奇妙な動作が発生しています:

Application-Context.xml

<util:map id="transportMap" key-type="java.lang.String" value-type="org.cometd.client.transport.ClientTransport">
    <entry key="websocket" value-ref="websocketTransport" />
    <entry key="long-polling" value-ref="longPollingTransport" />
</util:map>
<bean id="cometDClient" class="com.client.CometDClient" />

次に、CometDClient.java で:

@Inject
private Map<String, ClientTransport> transportMap;

ただし、 のマッピングを持つマップで終わる代わりに"websocket":websocketTransport, "long-polling":longPollingTransport、 を取得し"websocketTransport":websocketTransport, "longPollingTransport":longPollingTransportます。

つまり、Beanの名前がキーとして使用されています。ここで私が間違っていることはありますか?それは私にとっても十分に馬鹿げたものでなければならないようです。

4

2 に答える 2

1

私は今これをテストするものを何も持っていないので、手足に出かけます...

ClientTransportSpring は、 -implementations を値として使用してマップを要求しているのを「見る」だけで、Bean 名をキーとして配置transportMapするため、xml で定義したものを実際に注入するわけではないと思います。あなたは使用してみることができます

@Inject
@Qualifier("transportMap")
private Map<String, ClientTransport> transportMap;

そして、それが役立つかどうかを確認してください。

于 2013-10-04T16:24:08.007 に答える