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 可以在事件发布方法上,使用此注解,让事件发布和订阅者处理整个过程是异步的,使用异步注解最好自定义一个线程池,并定义超过线程池容量后的排斥机制,防止线程丢失