guava eventbus不支援spring的aop代理

wilsonp發表於2014-04-11
今天在使用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的代理類,還在實踐中....

不知道有沒有童鞋已經遇到這個問題並有其他的解決方案的沒?

相關文章