gpt4 book ai didi

java - 让 Spring IOC 使用 MVP 模式

转载 作者:行者123 更新时间:2023-11-30 05:14:37 25 4
gpt4 key购买 nike

我正在尝试使用 MVP Swing 应用程序与 Spring IOC 结合的设计模式。在 MVP 中,View 需要将自身传递给 Presenter,但我不知道如何使用 Spring 来做到这一点。

public class MainView  implements IMainView {

private MainPresenter _presenter;

public MainView() {

_presenter = new MainPresenter(this,new MyService());

//I want something more like this
// _presenter = BeanFactory.GetBean(MainPresenter.class);

}

}

这是我的配置 xml(不正确)

<bean id="MainView" class="Foo.MainView"/>
<bean id="MyService" class="Foo.MyService"/>

<bean id="MainPresenter" class="Foo.MainPresenter">
<!--I want something like this, but this is creating a new instance of View, which is no good-->
<constructor-arg type="IMainView">
<ref bean="MainView"/>
</constructor-arg>
<constructor-arg type="Foo.IMyService">
<ref bean="MyService"/>
</constructor-arg>
</bean>

如何将 View 添加到 Presenter 中?

最佳答案

您可以使用 BeanFactory.getBean(String name, Object...args) 覆盖用于创建 Bean 的构造函数参数。这种方式的缺点是必须通过 bean 名称而不是其类来进行查找,并且此方法会立即覆盖所有构造函数参数,因此您必须对 MyService 使用 setter 依赖:

 public class MainView  implements IMainView { 

private MainPresenter _presenter;

public MainView() {
_presenter = beanFactory.getBean("MainPresenter", this);
}
}

还要注意 prototype 范围,这是因为每个 MainView 都需要自己的 MainPresenter

<bean id="MyService" class="Foo.MyService"/>   

<bean id="MainPresenter" class="Foo.MainPresenter" scope = "prototype">
<constructor-arg type="IMainView"><null /></constructor-arg>
<property name = "myService">
<ref bean="MyService"/>
</property>
</bean>

关于java - 让 Spring IOC 使用 MVP 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2037712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com