来自嵌套注入的 Bean 铸造错误
Bean casting error from nested injections
我现在正在 Spring 与我的项目集成,特别是 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() 的方法。
这真的让我很困惑。有什么建议或意见吗?谢谢!
检查你的类路径,可能你有重复的 jars。
我 运行 你的代码在我的环境中使用最后一个 spring 引导版本,没有任何关于 spring 的版本规范并且它工作正常,唯一的错误是
MessageBuilder.withPayload("This is a message!")
应该是MessageBuilder.withPayload("This is a message!").build()
并且我使用 org.springframework.integration.support.MessageBuilder
进行了验证。
尝试在 BrokerConfiguration 的 brokerChannel1() 的 return 语句中进行显式转换。
您在类路径上有旧版本的 Spring 集成; MessageChannel
等在 Spring 4.0 中从 o.s.integration...
移动到 o.s.messaging
。
您需要使用 Spring 集成 4.x。
我现在正在 Spring 与我的项目集成,特别是 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() 的方法。
这真的让我很困惑。有什么建议或意见吗?谢谢!
检查你的类路径,可能你有重复的 jars。
我 运行 你的代码在我的环境中使用最后一个 spring 引导版本,没有任何关于 spring 的版本规范并且它工作正常,唯一的错误是
MessageBuilder.withPayload("This is a message!")
应该是MessageBuilder.withPayload("This is a message!").build()
并且我使用 org.springframework.integration.support.MessageBuilder
进行了验证。
尝试在 BrokerConfiguration 的 brokerChannel1() 的 return 语句中进行显式转换。
您在类路径上有旧版本的 Spring 集成; MessageChannel
等在 Spring 4.0 中从 o.s.integration...
移动到 o.s.messaging
。
您需要使用 Spring 集成 4.x。