guava eventbus不支持spring的aop代理
今天在使用guava eventbus发送事件的时候,post之后没有进入相应的处理方法断点中,发觉很奇怪,然后就看了看eventbus的源代码,其中有一处:
public void register(Object object) {
Multimap<Class<?>, EventSubscriber> methodsInListener =
finder.findAllSubscribers(object);
subscribersByTypeLock.writeLock().lock();
try {
subscribersByType.putAll(methodsInListener);
} finally {
subscribersByTypeLock.writeLock().unlock();
}
}
@Override
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.getParameterTypes();
Class<?> eventType = parameterTypes[0];
EventSubscriber subscriber = makeSubscriber(listener, method);
methodsInListener.put(eventType, subscriber);
}
return methodsInListener;
}
发现findAllSubscribers方法中的 Class<?> clazz = listener.getClass();代码只是获取监听器的class对象,但此时spring已经对该监听器生成了代理类,所以获取到的始终都是proxy,而在这个proxy对象中没有相关的处理方法,所以根本就没有注册成功,所以就进入不了断电了,想修改源代码来支持spring的代理类,还在实践中....
不知道有没有童鞋已经遇到这个问题并有其他的解决方案的没?