Guava提供了EventBus事件总线工具,可以很方便的创建观察者模式,基本使用请参考如下链接
http://www.cnblogs.com/peida/p/EventBus.html。
在设置观察者时,需要使用注解类@Subscribe来标识一个订阅者,但在注解中还要一个注解@AllowConcurrentEvents,这个注解是用来标识当前订阅者是线程安全的,那Guava内部是如何实现的呢?
直接上代码:
//AnnotatedSubscriberFinder.java
public Multimap<Class<?>, EventSubscriber> findAllSubscribers(Object listener) {
Multimap<Class<?>, EventSubscriber> methodsInListener = HashMultimap.create();
Class<?> clazz = listener.getClass();
for (Method method : getAnnotatedMethods(clazz)) {
Class<?>[] parameterTypes = method.getParame