如何注入自定义 BeanFactory

How to inject a custom BeanFactory

对于自定义 Scope(由于法律原因,我不能在此处 post)我需要一个自定义 BeanFactory 来覆盖 getBean(Class requiredType) 方法,例如:

public class MyBeanFactory implements BeanFactory {

    @Override
    public <T> T getBean(Class<T> requiredType) throws BeansException {
        if(MyScope.someSetting) {
            return useBeanA();
        } else {
            return useBeanB();
        }
    }
}

这个 BeanFactory 必须在我的整个 spring 容器中用于获取 bean(按类型)。如何将其注入 ApplicationContext(或者我需要自定义 ApplicationContext)?

我不能使用 FactoryBean,因为逻辑对一个(或几个)bean 来说并不特殊。我不能使用 InstantiationAwareBeanPostProcessor 因为它的 postProcessBeforeInstantiation() 方法只被调用一次。

根据 'spacetrucker' 的建议(请参阅问题的评论),我解决问题的方式完全不同。我将我的 bean 实例化/选择逻辑添加到我的自定义 Scope 并通过构造函数将 BeanFactory 注入到此 Scope.