对于不同的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
    }
}

10-06 13:00