嵌套注入的Bean转换错误

时间:2015-08-13 15:54:20

标签: java spring spring-integration

我现在正在使用Spring Integration和我的项目,特别是使用MessageChannel / PublishSubscribeChannel。我想要实现的是创建一个代理模块,以便系统的其他部分可以调用此模块将消息发送到特定的MessageChannel。

以下是我现在在代理模块中所做的事情:

@Configuration
public class BrokerConfiguration {
  @Bean
  public MessageChannel brokerChannel1() {
    return new PublishSubscribeChannel();
  }
}

@Component
public class BrokerA {
  @Autowired
  @Qualifier("brokerChannel1")
  public MessageChannel messageChannel;

  public void sendAMessage() {
    messageChannel.send(MessageBuilder.withPayload("This is a message!").build());
  }
}

我通过在代理模块中创建一个SpringBootApplication来解决这个问题,它似乎工作得很好。但是,当我尝试在我的系统的不同模块中使用它时,如下所示:

@Autowired
private BrokerA brokerA;

public void doSomethingHere() {
  brokerA.sendAMessage();
}

我得到这样的ClassCastException:

java.lang.ClassCastException: org.springframework.integration.channel.PublishSubscribeChannel cannot be cast to org.springframework.messaging.MessageChannel

当我将BrokerA中的messageChannel更改为PublishSubscribeChannel类型时,它会抱怨PublishSubscribeChannel没有名为send()的方法。

这真让我感到困惑。有什么建议或意见吗?谢谢!

4 个答案:

答案 0 :(得分:1)

检查你的类路径,可能你有重复的jar。

答案 1 :(得分:1)

你在类路径上有一个旧版本的Spring Integration;在Spring 4.0中,MessageChannel等已从o.s.integration...移至o.s.messaging

您需要使用Spring Integration 4.x。

答案 2 :(得分:0)

我在上一个春季启动版本的环境中运行了你的代码,没有关于spring的任何版本规范,并且它正常工作,唯一的错误在于

MessageBuilder.withPayload("This is a message!")它应该是MessageBuilder.withPayload("This is a message!").build()

我使用org.springframework.integration.support.MessageBuilder进行了验证。

答案 3 :(得分:0)

尝试在BrokerConfiguration中的brokerChannel1()的return语句中进行显式强制转换。