Spring-只需创建供应商<;MyPrototypeBean>;
对于不同的bean生命周期,我找不到一个好的简单的解决方案 我想注射Spring-只需创建供应商<;MyPrototypeBean>;,spring,dependency-injection,prototype,factory,factory-pattern,Spring,Dependency Injection,Prototype,Factory,Factory Pattern,对于不同的bean生命周期,我找不到一个好的简单的解决方案 我想注射 @Resource private Supplier<MessageHandler> messageHandlerFactory; @Resource 私人供应商:马格斯汉德尔工厂; 在@Servicebean中,每次调用messageHandlerFactory.get()时创建一个新的MessageHandler实例(原型,具有自己的依赖项) 对于这样一个常见的任务,我发现命名为的解决方案似乎过于复杂和繁琐
@Resource
private Supplier<MessageHandler> messageHandlerFactory;
@Resource
私人供应商:马格斯汉德尔工厂;
在@Service
bean中,每次调用messageHandlerFactory.get()时创建一个新的MessageHandler实例(原型,具有自己的依赖项)代码>
对于这样一个常见的任务,我发现命名为的解决方案似乎过于复杂和繁琐
使用@Configuration
类的最短、最干净的解决方案是什么
==更新==
我刚刚意识到供应商应该如中所定义。您可以将MessageHandler
的范围定义为原型
:
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class MessageHandler {
}
并使用ObjectFactory
从单例获取MessageHandler
@Component
public class YourSingleton {
@Autowired
ObjectFactory<MessageHandler> mhFactory;
public void doSomething() {
final MessageHandler messageHandler = mhFactory.getObject();
// messageHandler is a prototype
}
}
@组件
公营单身人士{
@自动连线
对象工厂;
公共无效剂量测定法(){
final MessageHandler MessageHandler=mhFactory.getObject();
//messageHandler是一个原型
}
}
谢谢,这就是我要找的。我现在如何重新布线mhFactory以创建另一个MessageHandler?对不起,我不确定您想要实现什么。每次调用mhFactory.getObject()
都会得到一个新的MessageHandler
实例,因为您已将其范围
声明为原型
。是否要重新连接mhFactory?为了进行测试,我想重新布线mhFactory
,以生成SomeChildMessageHandler
。这是怎么可能的?您可以在YourSingleton
中有一个setter,并注入一个实现ObjectFactory
的匿名类,该类返回SomeChildMessageHandler的实例。
或者您可以使用Mockito
对其进行模拟。如果您需要更多详细信息,您可以创建一个新问题,因为很难在评论中解释这一点。