具有监听器的类的上下文 - spring-rabbitmq,内部和基于包含消息的注入bean

时间:2017-03-29 18:49:46

标签: java spring dependency-injection spring-integration spring-rabbitmq

我正在使用spring-bootspring-rabbitmq包。我有一些配置类和类代表客户端。此客户端类有一个使用@RabbitListener注释的侦听器。我的配置和客户端一切都很好 - 它确实有效。

但是,我需要了解有关此客户端类内部的一些详细信息。在上下文中是否有特殊的东西?我希望能够注入三个可用数据源中的一个(三个bean)。我的意思是我希望能够基于消息的第一个符号(感谢自定义转换器,我可以假设这个符号发生),实际的数据源bean将被注入/使用。

有什么想法吗?也许spring-rabbitmq会以某种方式修改上下文?

1 个答案:

答案 0 :(得分:0)

具有@RabbitListener的类必须在应用程序上下文中声明为bean(无论哪种方式 - 超出问题范围)。它必须是singleton - 只创建一次对象。因此,所有注射必须在其实例化/初始化期间完成。

因此,在@RabbitListener方法调用期间,您应该选择合适的DataSource,例如:

@Autowired
Map<String, DataSource> dataSources;

您在问题中描述的内容并不是Spring Dependency Injection Container的行为。