我正在使用Spring 3.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>
通过这种方式,我可以从applicationContext配置我的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
知道如何实现我的目标吗?
感谢, 射线。
答案 0 :(得分:0)
问题出现在另一个类中,我试图用@AutoWire注入FeedListenerMDB
答案 1 :(得分:0)
问题不在于您在此处显示的代码中。在代码的某处,你有类似的东西:
@Autowired
private FeedListenerMDB feedListenerMDB;
Spring无法解决此依赖关系,因为有两个候选可用。
使用@Qualifier
注释或在您的要求中更具体。