我有一个有趣的问题,我希望你可以帮助我:
我有一个名为AContainer
的bean。它包含两个bean PartA
和PartB
。 PartA
和PartB
需要共享一个我称之为PartX
的bean。
我的应用程序将创建多个AContainer
,每个PartA
都有自己的PartB
和PartA
实现。但是,每个PartB
和PartX
对都需要共享PartA
。
正如我所看到的,如果我将PartX设为单身,则每个PartB
/ PartX
对将共享相同的PartA
(因此我不能这样做)。但是,如果我将它们设为原型,PartB
和PartX
将获得各自的{{1}}个实例。是否有第三种选择可以让我用Spring设置它?
答案 0 :(得分:3)
AFAIK Spring无法为您处理自定义范围注射。您需要在PartX
中为PartA
和PartB
手动注入AContainer
的实例。一种方法是在PartX
@PostConstruct
中获取AContainer
(原型作用域)的单个实例,然后在PartA
和PartB
中注入此实例:
@Component
@Scope("prototype")
public class AContainer {
@Autowired
private PartA partA;
@Autowired
private PartB partB;
@Autowired
private BeanFactory beanFactory;
@PostConstruct
public void init() {
PartX partX = beanFactory.getBean("partX"); //name assumed
partA.setPartX(partX);
partB.setPartX(partX);
}
//rest of your code...
}