在我的MVP应用我使用的代码如电线我演示以下和查看:MVP与Spring IOC没有循环引用?
View view = new View();
Presenter presenter = new Presenter(view);
view.setPresenter(presenter);
的View
类是在暂时无效状态构造,其调用setPresenter
整流。如果在没有配置Presenter的情况下使用View,我在View
类中有一些代码会抛出IllegalStateException
。
我希望春天能与配置连接到一起了这种关系,如:
<bean id="presenter" class="com.foo.Presenter">
<constructor-arg ref="view" />
</bean>
<bean id="view" class="com.foo.View">
<property name="presenter" ref="presenter" />
</bean>
这失败,一个漫长的圆形依赖性例外。
有没有一种方法可以告诉Spring构建view
bean,然后在最终调用view
之前调用setter,然后构造presenter
bean?
有关的问题是Spring setter dependency injection after all beans have been created。但是,suggested solutions之一是通过使用基于setter的布线解决循环依赖关系,这正是我在这里没有做到的。该latest manual似乎也同意 - 见“循环依赖”框:
一个可能的解决方法是编辑一些类的源代码,通过制定者,而不是构造器进行配置。或者,避免构造函数注入并仅使用setter注入。换句话说,虽然不推荐使用,但您可以使用setter注入配置循环依赖关系。
如果您使用更好的容器,如Guice,它会自动为您找出循环依赖关系。Spring是IoC框架的一个缓慢的,过时的恐龙。这在2004年非常好,但这是2013年。现在是时候继续改进。 – rees 2013-04-24 22:21:46