对于不同的bean生命周期,我找不到一个好的简单解决方案。
我想注入一个
@Resource
private Supplier<MessageHandler> messageHandlerFactory;
每次调用
@Service
时,在messageHandlerFactory.get();
bean中创建一个新的MessageHandler实例(原型,具有自己的依赖关系)。对于这种常见任务,我发现名为Method Injection的解决方案似乎过于繁琐。
使用
@Configuration
类最短,最简洁的解决方案是什么?==更新==
我刚刚意识到,供应商应为Provider中定义的JSR-330。
最佳答案
您可以将MessageHandler
的范围定义为Prototype
:
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class MessageHandler {
}
并使用
ObjectFactory
从Singleton获取MessageHandler
。@Component
public class YourSingleton {
@Autowired
ObjectFactory<MessageHandler> mhFactory;
public void doSomething() {
final MessageHandler messageHandler = mhFactory.getObject();
// messageHandler is a prototype
}
}