我真的不能找到一个巧妙的方法在Spring这样做 - 可以想象我有一个类来监听消息:如何连接多个监听风格豆春季
@Component
public class MessageReceiver {
private List<MessageHandler> handlers = new ArrayList<>();
public void receiveMessage(Message m) {
for(MessageHandler handler: handlers) {
handler.process(m);
}
}
public void registerMessageHandler(MessageHandler handler) {
handlers.add(handler);
}
}
基本上,我想能够定义多个MessageHandler
豆,并自己注册MessageReceiver
。我宁愿不必在某处保留一个MessageHandler
列表 - 我只是简单地喜欢Spring在上下文中找到任何内容(可能注释了@Bean
或@Component
),并让他们将registerMessageHandler()
方法作为布线过程的一部分。
最简单的方法是什么?
我想它可以工作,但它有点破解和滥用事件机制的东西它不是要做的。我想我宁愿在'@ Configuration' bean中维护一个处理程序列表,如果有一些额外的工作,这至少是正确的。 – BarrySW19
如果你的处理程序事先知道,它听起来像,它们应该是singleton bean,这意味着你可以从Spring上下文获得它们。通过使用'ApplicationContextAware'' MessageReceiver',然后使用'getBeansOfType'或'@ Autowiring'' List'查看'MessageReceiver'。如果处理程序是短暂的,那么您可能需要在代码中注册/取消注册它们。 –
啊,我没有看到autowired集合 - 这似乎是我想要的。 – BarrySW19