如何将同一个bean实例注入多个bean

时间:2014-08-05 21:33:13

标签: java spring

我有一个有趣的问题,我希望你可以帮助我:

我有一个名为AContainer的bean。它包含两个bean PartAPartBPartAPartB需要共享一个我称之为PartX的bean。

我的应用程序将创建多个AContainer,每个PartA都有自己的PartBPartA实现。但是,每个PartBPartX对都需要共享PartA

正如我所看到的,如果我将PartX设为单身,则每个PartB / PartX对将共享相同的PartA(因此我不能这样做)。但是,如果我将它们设为原型,PartBPartX将获得各自的{{1}}个实例。是否有第三种选择可以让我用Spring设置它?

1 个答案:

答案 0 :(得分:3)

AFAIK Spring无法为您处理自定义范围注射。您需要在PartX中为PartAPartB手动注入AContainer的实例。一种方法是在PartX @PostConstruct中获取AContainer(原型作用域)的单个实例,然后在PartAPartB中注入此实例:

@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...
}