Java跨模塊調(diào)用方式
Java常見的調(diào)用其他類或包的方法
- Spring IoC
- SPI
- Listener/Callback
- EventBus(類比Guava的事件總線)
Spring IoC
- 將所有類的實(shí)例的生成和管理都交由第三方,調(diào)用方從第三方拿到被調(diào)用方的實(shí)例,從而實(shí)現(xiàn)調(diào)用
SPI
- SPI即Service Provider Interface,調(diào)用方只有包含該方法的接口,需要調(diào)用方自己將獲取到的接口實(shí)現(xiàn)類實(shí)例注入到容器中,再?gòu)娜萜髦腥〕稣{(diào)用
- 使用SPI的示例:JDK自帶的ServiceLoader.loader、Dubbo等
Listener/Callback
- Listener是一個(gè)集合,子模塊A將要使用的方法所在接口的實(shí)例放在這個(gè)集合中,子模塊B將這些接口的實(shí)現(xiàn)類塞進(jìn)這個(gè)集合中,A要使用的時(shí)候就會(huì)看這個(gè)Listener集合具體哪些接口有實(shí)現(xiàn),再通過接口的方式去調(diào)用
- 使用Listener/Callback的示例:常見的各種GUI、事件處理
EventBus
- 調(diào)用方通過總線去調(diào)用被調(diào)用方,調(diào)用方與被調(diào)用方使用同一個(gè)總線對(duì)象,調(diào)用方向總線發(fā)送某類型的事件對(duì)象,此時(shí)被調(diào)用方在總線注冊(cè)自己的實(shí)例同時(shí)告訴總線自己訂閱的事件類型,通過相同事件類型實(shí)現(xiàn)了調(diào)用方與被調(diào)用方之間的調(diào)用關(guān)系
- 調(diào)用方與被調(diào)用方之間的數(shù)據(jù)傳輸,將需要傳輸?shù)臄?shù)據(jù)作為某類型的事件對(duì)象的成員屬性,在實(shí)現(xiàn)調(diào)用關(guān)系的同時(shí),數(shù)據(jù)也得以傳輸
- 使用EventBus的示例:Guava的事件總線
Java兩個(gè)模塊之間調(diào)用service注入問題
遇到上述問題需要加入以下語(yǔ)句
@SpringBootApplication(scanBasePackages = {“com.heisenberg.weather.pro”,“com.heisenberg.authmgr”}) @MapperScan(basePackages = {“com.heisenberg.weather_pro.mapper”,“com.heisenberg.authmgr.dao”})
需要在調(diào)用別的模塊的主程序上加入scanBasePackages 范圍,要不然程序不知道你引用的是誰(shuí),并且要掃描創(chuàng)建的實(shí)體類的位置basePackages
否則出現(xiàn)以下情況:
No qualifying bean of type ‘com.zxq.api.dao.UserDao’ available: expected at least …
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java面試常問的Runnable和Callable的區(qū)別
大家好,本篇文章主要講的是java面試常問的Runnable和Callable的區(qū)別,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01MyBatis中${}?和?#{}?有什么區(qū)別小結(jié)
${}?和?#{}?都是?MyBatis?中用來(lái)替換參數(shù)的,它們都可以將用戶傳遞過來(lái)的參數(shù),替換到?MyBatis?最終生成的?SQL?中,但它們區(qū)別卻是很大的,今天通過本文介紹下MyBatis中${}?和?#{}?有什么區(qū)別,感興趣的朋友跟隨小編一起看看吧2022-11-11詳解Java實(shí)現(xiàn)批量壓縮圖片裁剪壓縮多種尺寸縮略圖一鍵批量上傳圖片
這篇文章主要介紹了Java實(shí)現(xiàn)批量壓縮圖片裁剪壓縮多種尺寸縮略圖一鍵批量上傳圖片,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03MyBatis不同Mapper文件引用resultMap實(shí)例代碼
這篇文章主要介紹了mybatis 不同Mapper文件引用resultMap的實(shí)例代碼,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2017-07-07Java用POI解析excel并獲取所有單元格數(shù)據(jù)的實(shí)例
下面小編就為大家?guī)?lái)一篇Java用POI解析excel并獲取所有單元格數(shù)據(jù)的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-10-10SpringBoot的Admin服務(wù)監(jiān)控詳解
這篇文章主要介紹了SpringBoot的Admin服務(wù)監(jiān)控詳解,Spring Boot Admin(SBA)是一個(gè)開源的社區(qū)項(xiàng)目,用于管理和監(jiān)控 Spring Boot 應(yīng)用程序,需要的朋友可以參考下2024-01-01解決IDEA中Maven依賴包導(dǎo)入失敗報(bào)紅問題(總結(jié)最有效8種解決方案)
這篇文章主要介紹了解決IDEA中Maven依賴包導(dǎo)入失敗報(bào)紅問題,本文通過圖文詳解給大家總結(jié)了最有效的8種解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07