0

Spring3.1を使用しています

それをリッスンするHornetQとMDBを構成しました。

私の目標は、それらのMDBSに、固有のプロパティを持つプロパティクラスを注入することです。

各MDBには独自のプロパティがあります

試してみるとすぐに例外が発生します。

それが私のコードです:

MDB:

public class FeedListenerMDB implements MessageListener
{
    private final static Logger log = Logger.getLogger(FeedListenerMDB.class);

    FeedPropertiesDTO feedPropertiesDTO;

    ...



    @Override
    public void onMessage(Message message)
    {
        if (message instanceof TextMessage)
        {
            try
            {
                String text = ((TextMessage) message).getText();
                log.debug("i am marketmaker=" + feedPropertiesDTO.getMarketMakerId() + " and the message I got=" + text);
            }
            catch (JMSException ex)
            {
                throw new RuntimeException(ex);
            }
        }
        else
        {
            throw new IllegalArgumentException("Message must be of type TextMessage");
        }
    }

}

それはFeedPropertiesDTOです:

public class FeedPropertiesDTO
{
    private String marketMakerId;

    public String getMarketMakerId()
    {
        return marketMakerId;
    }

    public void setMarketMakerId(String marketMakerId)
    {
        this.marketMakerId = marketMakerId;
    }

}

これが私のアプリケーションコンテキストBeanの設定です。

<bean id="FeedListenerMarketMaker1MDB" class="com.fixgw.mdb.FeedListenerMDB">
        <property name="feedPropertiesDTO" ref="feedListenerMarketMaker1Properties" />
    </bean>

    <bean id="feedListenerMarketMaker1Properties" class="com.fixgw.dto.FeedPropertiesDTO">
        <property name="marketMakerId" value="1" />
    </bean>


    <bean id="FeedListenerMarketMaker2MDB" class="com.fixgw.mdb.FeedListenerMDB">
        <property name="feedPropertiesDTO" ref="feedListenerMarketMaker2Properties" />
    </bean>


    <bean id="feedListenerMarketMaker2Properties" class="com.fixgw.dto.FeedPropertiesDTO" >
        <property name="marketMakerId" value="2" />
    </bean>

このようにして、アプリケーションコンテキストからMDBSを構成し、コードに触れることなく将来的に新しいMDBSを追加できるようになります。

しかし、私はこのエラーを受け取ります:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.fixgw.mdb.FeedListenerMDB] is defined: expected single matching bean but found 2: [FeedListenerMarketMaker1MDB, FeedListenerMarketMaker2MDB]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:800)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:551)
    ... 17 more

必要なことをどのように達成できるか考えていますか?

ありがとう、レイ。

4

2 に答える 2

0

問題は、@AutoWireを使用してFeedListenerMDBに注入しようとした別のクラスにありました。

于 2012-07-10T14:12:17.433 に答える
0

ここに示したコードには問題はありません。コードのどこかに、次のようなものがあります。

@Autowired
private FeedListenerMDB feedListenerMDB;

利用可能な候補が2つあるため、Springはこの依存関係を解決できません。

アノテーションを使用する@Qualifierか、要件をより具体的にしてください。

于 2012-07-10T14:12:19.617 に答える