Java 如何注入自定义BeanFactory
对于自定义的Java 如何注入自定义BeanFactory,java,spring,spring-ioc,Java,Spring,Spring Ioc,对于自定义的Scope(由于法律原因,我无法在这里发布)我需要一个自定义的BeanFactory,它覆盖getBean(Class requiredType)方法,例如: public class MyBeanFactory implements BeanFactory { @Override public <T> T getBean(Class<T> requiredType) throws BeansException { if(My
Scope
(由于法律原因,我无法在这里发布)我需要一个自定义的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();
}
}
}
公共类MyBeanFactory实现BeanFactory{
@凌驾
公共T getBean(类requiredType)抛出BeansException{
if(MyScope.someSetting){
返回useBeanA();
}否则{
返回useBeanB();
}
}
}
这个BeanFactory
必须在我的整个spring容器中使用,以获取bean(按类型)。如何将其注入ApplicationContext
(或者我需要自定义ApplicationContext
)中
我不能使用
FactoryBean
,因为该逻辑不是一个(或几个)bean所特有的。我不能使用实例化WarebeanPostProcessor
,因为它的postProcessBeforeInstantiation()
方法只调用一次。正如“spacetrucker”(参见问题的注释)所建议的那样,我解决了完全不同的问题。我将我的bean实例化/选择逻辑添加到我的自定义范围
,并由构造函数向这个范围
注入一个BeanFactory,这不是应该只由bean的范围来处理的事情吗?所以,如果您的问题真的是将一个作用域应用于所有bean,而不是普通的单例作用域,那么最好看看您是如何实现这一点的。您正在使用什么类型的应用程序上下文,或者它必须是一个通用解决方案?我的自定义范围仅应用于某些bean,而不是所有bean。这就是为什么我需要对实例化/选择逻辑进行一些修改。我正在使用注释ConfigWebApplicationContex
,但是您的自定义范围不能只做您当前在MyBeanFactory.getBean
中用自己的方法MyCustomScope.get(String,ObjectFactory)
实现的事情吗?谢谢。我现在明白你的意思了。我将尝试一下……目前我只调用objectFactory.getObject()
,不幸的是,这是objectFactory
的唯一方法。我可以将它转换到BeanFactory
以获得其他bean,但我不确定,这是否是一个好主意?