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的代理類,還在實踐中....
不知道有沒有童鞋已經遇到這個問題並有其他的解決方案的沒?
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的代理類,還在實踐中....
不知道有沒有童鞋已經遇到這個問題並有其他的解決方案的沒?
相關文章
- Google guava原始碼之EventBusGoGuava原始碼
- 死磕Spring之AOP篇 - Spring AOP自動代理(三)建立代理物件Spring物件
- Spring AOP 自動建立代理Spring
- Spring AOP代理執行解析Spring
- 死磕Spring之AOP篇 - Spring AOP自動代理(一)入口Spring
- Spring框架系列(10) - Spring AOP實現原理詳解之AOP代理的建立Spring框架
- 從代理機制到Spring AOPSpring
- 3種代理模式-理解Spring Aop模式Spring
- Spring AOP --JDK動態代理方式SpringJDK
- 死磕Spring之AOP篇 - Spring AOP兩種代理物件的攔截處理Spring物件
- 從動態代理到Spring AOP(中)Spring
- 從動態代理到Spring AOP(上)Spring
- Guava 原始碼分析之 EventBus 原始碼分析Guava原始碼
- 死磕Spring之AOP篇 - Spring AOP自動代理(二)篩選合適的通知器Spring
- spring aop原理 JDK動態代理和CGLIB動態代理SpringJDKCGLib
- 【Spring】AOP的代理預設是Jdk還是Cglib?SpringJDKCGLib
- Spring AOP 中被代理的物件一定是單例嗎?Spring物件單例
- 淺析Spring中AOP的實現原理——動態代理Spring
- 聊聊 Spring AOP 的不為常知的“祕事”Spring
- Spring AOP裡的靜態代理和動態代理,你真的瞭解嘛?Spring
- JAVA-Spring AOP基礎 - 代理設計模式JavaSpring設計模式
- AOP詳解之三-建立AOP代理後記,建立AOP代理
- Spring 的 AOPSpring
- 一文讀懂Guava EventBus(訂閱\釋出事件)Guava事件
- [Spring]AOPSpring
- spring AOPSpring
- Spring框架系列(11) - Spring AOP實現原理詳解之Cglib代理實現Spring框架CGLib
- Spring框架系列(12) - Spring AOP實現原理詳解之JDK代理實現Spring框架JDK
- 看了絕對不會後悔之:spring AOP原理Spring
- 【Spring AOP】AOP 底層實現原理 —— 動態代理類的建立(JDK、CGlib)、工廠如何加工原始物件SpringJDKCGLib物件
- Spring事務管理與AOP代理的原理,預設的單例物件和代理物件銷燬的時機Spring單例物件
- 死磕Spring之AOP篇 - Spring AOP總覽Spring
- Spring Boot整合Spring AopSpring Boot
- 設計模式之釋出訂閱模式(4) Guava Eventbus 事件處理設計模式Guava事件
- Java動態代理(AOP)Java
- spring-aopSpring
- Spring AOP APISSpringAPI
- Spring AOP IOCSpring
- 只有掌握了這三種代理模式,才能進軍Spring AOP哦!模式Spring