我通读了一下Spring Framework文档,找到了一个关于使用ApplicationContext在Spring中引发事件的章节。读了几个段落后,我发现Spring事件是同步引发的。有没有办法引发异步事件?非常感谢您的帮助。我正在寻找类似的东西,这将有助于我完成我的模块。
发布于 2013-03-22 12:43:10
最简单的异步ApplicationListener
出版商:
@Autowired
private SimpleApplicationEventMulticaster simpleApplicationEventMulticaster;
@Autowired
private AsyncTaskExecutor asyncTaskExecutor;
// ...
simpleApplicationEventMulticaster.setTaskExecutor(asyncTaskExecutor);
// ...
ApplicationEvent event = new ApplicationEvent("");
simpleApplicationEventMulticaster.multicastEvent(event);监听程序:
@Component
static class MyListener implements ApplicationListener<ApplicationEvent>
public void onApplicationEvent(ApplicationEvent event) {
// do stuff, typically check event subclass (instanceof) to know which action to perform
}
}您应该使用您的特定事件子类化ApplicationEvent。您可以在XML文件中配置SimpleApplicationEventMulticaster及其taskExecutor。
您可能希望在侦听器类中实现ApplicationEventPublisherAware,并在事件构造函数中传递一个源对象(而不是空字符串)。
发布于 2009-09-06 18:13:39
替代通知策略可以通过实现ApplicationEventMulticaster (请参阅Javadoc)及其底层(助手)类层次结构来实现。通常,您要么使用基于JMS的通知机制(正如David已经建议的那样),要么附加到Spring的TaskExecuter抽象(请参阅Javadoc)。
发布于 2009-09-05 15:26:52
Spring本身(AFAIK)是同步工作的,但你可以做的是创建你自己的ApplicationListener代理--一个实现了这个接口的类,但它并不是处理事件,而是通过发送到另一个(或新的)线程、发送JMS消息等来委托它。
https://stackoverflow.com/questions/1382633
复制相似问题