註解實現EventBus功能

2021-10-04 07:13:19 字數 1289 閱讀 4521

核心還是反射,註解相關的好像都需要通過反射去處理

實現思路:

1. 定義乙個map集合存放註冊eventbus的物件,以及該物件註冊的事件方法和引數

2.註冊時去遍歷獲取該物件符合條件的註解屬性,並存到步驟1的集合中

3.傳送事件時,遍歷步驟1建立的集合,判斷傳送事件的object物件型別,如果集合中有該物件型別或者該物件型別的父類,則認為是匹配的,這時候的key就是實際註冊的activity等物件,根據key拿到相應的方法等屬性,通過反射去呼叫該方法

4.解除註冊,只需要移除相應物件即可(當然不移除會導致記憶體洩露)

先定義乙個方法註解

@retention(retentionpolicy.runtime)

@target(elementtype.method)

public @inte***ce subscribe

public enum threadmode

再定義乙個物件去儲存註冊資訊

public class methodmodes 

}

定義乙個單例的eventbus

public class eventbus 

return instance;

}}

定義乙個方法去獲取註冊物件中匹配的方法

private listgetmethods(object object) 

}return list;

}

定義傳送事件的方法,只要傳送的是方法定義的屬性類本身及其子類,都可以傳送

public void post(object object) 

});break;}}

}}

}private void invokepost(methodmodes item, object key, object type) catch (exception e)

}

最後是註冊和解註冊方法

public void register(object object) 

}public void unregister(object object)

}

使用方法和eventbus類似

@subscribe(threadmode = threadmode.main)

public void receive(eventmode msg)

註解實現介面攔截功能

方式一 我們在spring boot專案中時候,一般會採用token作為身份驗證,這樣也方便前端做免登入功能 一般方式 我們會自定義乙個 繼承webmvcconfigurer類,重寫addinterceptors方法,效果如下 configuration public class intercept...

EventBus的簡單實現

首先從eventbus的訂閱方法開始 eventbus的接收方法有乙個註解 subscriber,無返回值,乙個引數 建立乙個annotation,命名為subscribe 定義此註解用在方法之上 target elementtype.method 定義註解的生命週期為執行期 retention r...

Deprecated註解功能

強制 對外暴露的介面簽名,原則上不允許修改方法簽名,避免對介面呼叫方產生影響。接 口過時必須加 deprecated 註解,並清晰地說明採用的新介面或者新服務是什麼。這其中提到了 deprecated 註解,在之前的開發過程中沒遇到過這個註解,於是查了下他的功能 簡單來講就是,若某類或某方法加上該註...