Spring-只需创建供应商<;MyPrototypeBean>;

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实例(原型,具有自己的依赖项) 对于这样一个常见的任务,我发现命名为的解决方案似乎过于复杂和繁琐

对于不同的bean生命周期,我找不到一个好的简单的解决方案

我想注射

@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
对其进行模拟。如果您需要更多详细信息,您可以创建一个新问题,因为很难在评论中解释这一点。