Java Spring框架事件
我阅读了Spring框架文档,找到了一个关于使用Java Spring框架事件,java,spring,events,asynchronous,Java,Spring,Events,Asynchronous,我阅读了Spring框架文档,找到了一个关于使用ApplicationContext在Spring中引发事件的部分。读了几段之后,我发现Spring事件是同步发生的。有没有办法引发异步事件?非常感谢你的帮助。我正在寻找类似的东西来帮助我完成我的模块。Spring本身(AFAIK)同步工作,但您可以做的是创建自己的ApplicationListener代理—一个实现此接口的类,但它不是处理事件,而是通过发送到另一个(或新的)线程、发送JMS消息、,等。可通过实现ApplicationEventMu
ApplicationContext
在Spring中引发事件的部分。读了几段之后,我发现Spring事件是同步发生的。有没有办法引发异步事件?非常感谢你的帮助。我正在寻找类似的东西来帮助我完成我的模块。Spring本身(AFAIK)同步工作,但您可以做的是创建自己的ApplicationListener代理—一个实现此接口的类,但它不是处理事件,而是通过发送到另一个(或新的)线程、发送JMS消息、,等。可通过实现ApplicationEventMulticaster
(请参阅)及其底层(助手)类层次结构来实现替代通知策略。通常,您可以使用基于JMS的通知机制(正如David已经建议的)或附加到Spring的TaskExecuter
抽象(请参阅)。尝试在resources.groovy中覆盖ApplicationEventMulticaster bean,以便它使用线程池:
像这样的东西对我有用,比如说
import java.util.concurrent.*
import org.springframework.context.event.*
beans = {
applicationEventMulticaster(SimpleApplicationEventMulticaster) {
taskExecutor = Executors.newCachedThreadPool()
}
}
最简单的异步
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
}
}
@组件
静态类MyListener实现ApplicationListener
ApplicationEvent上的公共无效(ApplicationEvent事件){
//做一些事情,通常检查事件子类(instanceof)以了解要执行的操作
}
}
您应该使用特定事件对ApplicationEvent进行子类化。您可以在XML文件中配置SimpleApplicationEventMulticast
及其taskExecutor
您可能希望在侦听器类中实现
ApplicationEventPublisherAware
,并在事件构造函数中传递源对象(而不是空字符串)。使用spring中的SimpleAsyncTaskExecutor。参考:我希望它能在2009年出现。:)