spring 事件机制 异步操作

1 spring 事件机制的好处:解耦合,对于一对多的操作,可以接触代码耦合

2 针对于要解耦的操作,很多都可以异步操作,主线程响应时间会变快,spring提供的事件机制默认是同步的,

	@Override
	public void multicastEvent(final ApplicationEvent event, ResolvableType eventType) {
		ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event));
		for (final ApplicationListener<?> listener : getApplicationListeners(event, type)) {
			Executor executor = getTaskExecutor();
                        //线程池存在,走异步操作
			if (executor != null) {
				executor.execute(new Runnable() {
					@Override
					public void run() {
						invokeListener(listener, event);
					}
				});
			}
			else {
				invokeListener(listener, event);
			}
		}
	}

 如果想要实现异步操作,需要在发布者中提供ApplicationEventMulticaster的实现,并注入一个线程池,这样就可以实现异步;

坏处: 所有的操作都会异步

3 异步的另外一种实现:@Async 可以在事件发布方法上,使用此注解,让事件发布和订阅者处理整个过程是异步的,使用异步注解最好自定义一个线程池,并定义超过线程池容量后的排斥机制,防止线程丢失

猜你喜欢

转载自abc08010051.iteye.com/blog/2406885