我对豆子的一个常见模式如下:
public class PrototypeBean {
private SingletonBean singletonBean;
private int value;
public PrototypeBean(int value, singletonBean) {
this.value = value;
this.singletonBean = singletonBean;
}
}
我不能为我的生活弄清楚如果我不知道在运行时之前会有什么值,那么实例化这样的原型bean最简洁的方法是什么。我目前的模式如下:
public class FactoryImpl implements Factory{
private SingletonBean singletonBean;
public FactoryImpl(SingletonBean singletonBean) {
this.singletonBean = singletonBean;
}
public PrototypeBean getPrototypeBean(int value) {
return new PrototypeBean(value, singletonBean);
}
}
其中Factoryimpl以XML格式连接在一起。这对我来说似乎仍然很可怕,感觉我正在打破IoC。春天有没有更清洁的方法呢?
答案 0 :(得分:2)
这是我遇到的Spring中最缺少的功能之一。基本上,您的解决方案是我能想到的最佳解决方法(只需制作singletonBean
和value
字段final
)。
另一种方法是让Spring只用一个构造函数参数(PrototypeBean
)创建SingletonBean
并在之后传递value
(参见:Best way to refactor this in Spring?)。然而,这不太干净,因为它允许创建半初始化对象。
最好的解决方案是利用参数化<lookup-method/>
- 等待在Spring中实现的功能:SPR-7431。不要忘记投票和评论!