循环依赖和Spring驱动的事件队列

时间:2009-08-21 01:06:53

标签: spring

我有一个“MessageQueue”类。它只是对消息进行排队。需要发布消息能力的Bean只具有MessageQueue属性,而Spring负责注入消息。

问题是许多bean还需要将自己注册为侦听器。侦听器bean列表无法注入messageQueue,因为这会导致循环依赖。依赖链上下的许多bean需要发布消息和/或收听消息。

如何以一种不涉及循环依赖的方式实现Spring驱动的消息队列?

3 个答案:

答案 0 :(得分:0)

您使用的是构造函数还是setter注入?如果您正在使用二传手套注射(无需自动装配),那么您就可以了。 Spring可以解决循环依赖。它只是在注入属性之前注入对象。因此,如果您注入了这样的对象,最好不要在setter中使用它。如果需要进行一些初始化,请使用@PostConstruct或使用afterPropertiesSet()方法的InitiazlizingBean接口。

答案 1 :(得分:0)

如果你的情况涉及将笨拙的遗留类与构建侦听器的“做事”的构造函数联系起来,我通常会将遗留的wotsit包装在自定义的Spring FactoryBean中。这将具有所有必需的setter,并且仅在Spring完成对循环依赖的连接时才实例化目标对象。

不要害怕循环依赖,只要对象实例化和注入相当被动,Spring就会优雅地处理它们。充分利用@PostConstruct和/或InitializingBean让Spring的生命周期为您付出艰苦的努力。

答案 2 :(得分:0)

好吧,我担心的事情实际上很好。实际上很多东西都依赖于队列,但队列本身并不依赖于任何东西。它没有自己的依赖关系,因此不会以任何方式导致循环依赖问题。这只是一片有很多父母的叶子。傻傻的我: - )