class 的上下文与侦听器 - spring-rabbitmq,内部结构和基于消息包含的注入 bean
Context of class with listener - spring-rabbitmq, internals and injecting beans based on contain of message
我正在使用 spring-boot
和 spring-rabbitmq
包。我有一些配置 class 和 class 代表客户端。此客户 class 有一个用 @RabbitListener
注释的侦听器。我的配置和客户端一切正常 - 它确实有效。
但是,我需要了解有关此客户端内部的一些详细信息 class。上下文中是否设置了一些特殊的东西?我希望能够注入三个可用数据源(三个 bean)之一。我的意思是我希望能够基于消息的第一个符号(多亏了自定义转换器,我可以假设这个符号发生了),实际的数据源 bean 将是 injected/used。
有什么想法吗?也许 spring-rabbitmq
以某种方式修改上下文?
class 和 @RabbitListener
必须在应用程序上下文中声明为 bean(无论哪种方式 - 超出问题范围)。而且它必须是 singleton
- 只创建一次对象。因此,所有注射必须在其 instantiation/initialization.
期间完成
因此,在那个 @RabbitListener
方法调用期间,您应该只选择一个合适的 DataSource
,例如从:
@Autowired
Map<String, DataSource> dataSources;
您在问题中描述的不是 Spring 依赖注入容器的行为。
我正在使用 spring-boot
和 spring-rabbitmq
包。我有一些配置 class 和 class 代表客户端。此客户 class 有一个用 @RabbitListener
注释的侦听器。我的配置和客户端一切正常 - 它确实有效。
但是,我需要了解有关此客户端内部的一些详细信息 class。上下文中是否设置了一些特殊的东西?我希望能够注入三个可用数据源(三个 bean)之一。我的意思是我希望能够基于消息的第一个符号(多亏了自定义转换器,我可以假设这个符号发生了),实际的数据源 bean 将是 injected/used。
有什么想法吗?也许 spring-rabbitmq
以某种方式修改上下文?
class 和 @RabbitListener
必须在应用程序上下文中声明为 bean(无论哪种方式 - 超出问题范围)。而且它必须是 singleton
- 只创建一次对象。因此,所有注射必须在其 instantiation/initialization.
因此,在那个 @RabbitListener
方法调用期间,您应该只选择一个合适的 DataSource
,例如从:
@Autowired
Map<String, DataSource> dataSources;
您在问题中描述的不是 Spring 依赖注入容器的行为。