Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring框架事件_Java_Spring_Events_Asynchronous - Fatal编程技术网

Java Spring框架事件

Java Spring框架事件,java,spring,events,asynchronous,Java,Spring,Events,Asynchronous,我阅读了Spring框架文档,找到了一个关于使用ApplicationContext在Spring中引发事件的部分。读了几段之后,我发现Spring事件是同步发生的。有没有办法引发异步事件?非常感谢你的帮助。我正在寻找类似的东西来帮助我完成我的模块。Spring本身(AFAIK)同步工作,但您可以做的是创建自己的ApplicationListener代理—一个实现此接口的类,但它不是处理事件,而是通过发送到另一个(或新的)线程、发送JMS消息、,等。可通过实现ApplicationEventMu

我阅读了Spring框架文档,找到了一个关于使用
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年出现。:)