在我的 MVP 应用程序中,我使用如下代码来连接我的 Presenter 和 View:
View view = new View();
Presenter presenter = new Presenter(view);
view.setPresenter(presenter);
类在临时无效状态下View
构造,调用setPresenter
纠正。如果在没有配置 Presenter 的情况下使用 View ,我在类中有一些代码View
会抛出一个。IllegalStateException
我希望 Spring 可以将这种关系与如下配置联系起来:
<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,然后presenter
在最终调用 setter 之前构造 bean view
?
一个相关的问题是创建所有 bean 之后的 Spring setter 依赖注入。但是,建议的解决方案之一是通过使用基于设置器的连接来解决循环依赖关系,这正是我在这里没有做的。最新的手册似乎也同意——见题为“循环依赖”的方框:
一种可能的解决方案是编辑某些类的源代码以由设置器而不是构造器配置。或者,避免构造函数注入并仅使用 setter 注入。也就是说,虽然不推荐,但是可以通过setter injection来配置循环依赖。