最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring 事件監(jiān)聽機制實現(xiàn)跨模塊調(diào)用的思路詳解

 更新時間:2024年05月28日 14:50:26   作者:しろいし  
之前一個項目,有兩個模塊,A 模塊需要依賴 B 模塊,但現(xiàn)在 B 模塊有地方需要調(diào)用 A 模塊的方法,如果直接依賴,又會產(chǎn)生循環(huán)依賴問題,最終選擇使用 spring 的事件監(jiān)聽來解決該問題,下面給大家介紹Spring 事件監(jiān)聽機制實現(xiàn)跨模塊調(diào)用的思路,感興趣的朋友一起看看吧

之前一個項目,有兩個模塊,A 模塊需要依賴 B 模塊,但現(xiàn)在 B 模塊有地方需要調(diào)用 A 模塊的方法,如果直接依賴,又會產(chǎn)生循環(huán)依賴問題。最終選擇使用 spring 的事件監(jiān)聽來解決該問題。

思路就是,B 模塊去發(fā)布事件,A 中監(jiān)聽,得到數(shù)據(jù)后,通過引用返回給 B。

首先是定義事件

public class getUserInfoEvent extends ApplicationEvent {
    private String message;
    private Integer griddingId;
    private StringBuilder griddingName;
   public getUserInfoEvent(Object source, String message, Integer griddingId, StringBuilder griddingName) {
        super(source);
        this.message = message;
        this.griddingId = griddingId;
        this.griddingName = griddingName;//接收要獲取到值的StringBuilder
    }
   public StringBuilder getGriddingName() {
        return griddingName;
    }
   public Integer getGriddingId() {
        return griddingId;
    }
   public String getMessage() {
        return message;
    }
}

然后在 B 中去發(fā)布事件

   @Autowired
   ApplicationEventPublisher applicationEventPublisher;   //這個必須注入
@Override
   public SysUserVO getUserInfo(Long userId) {
       SysUser user = getById(userId);
       Integer griddingId = user.getGriddingId();
       StringBuilder griddingName= new StringBuilder();  //使用stringbuilder進行引用字符串操作,來獲取需要的值
	//上面是業(yè)務相關(guān)
       getUserInfoEvent event = new getUserInfoEvent(this,"發(fā)布“獲取用戶信息”事件",griddingId,griddingName); //定義事件
       applicationEventPublisher.publishEvent(event);  //發(fā)布事件
       //下面是獲取到數(shù)據(jù)之后的操作,不重要
       //這里事件是同步進行的
       SysUserVO sysUserVO = new SysUserVO();
       BeanUtils.copyProperties(user,sysUserVO);
       sysUserVO.setGriddingName(griddingName.toString());
       //  找到該用戶所屬角色
       String roleName = getRoleByUserId(userId);
       sysUserVO.setRoleName(roleName);
       SysUser parentUser = sysUserMapper.selectById(user.getParentId());
       sysUserVO.setParentName(ObjectUtils.isEmpty(parentUser) ? null : parentUser.getUserName());
       return sysUserVO;
   }

最后在 A 中監(jiān)聽事件

@EventListener
public void getGriddingNameByUserIdEventListener(getUserInfoEvent event) { //參數(shù)必須填寫要監(jiān)聽的事件類,事件發(fā)布后這邊就會監(jiān)聽到
    //形參event中存有傳遞的相關(guān)數(shù)據(jù)
    System.out.println(event.getMessage()); //會打印出---發(fā)布“獲取用戶信息”事件
    //下面為個人業(yè)務相關(guān)代碼
    Integer griddingId = event.getGriddingId();
    StringBuilder griddingName = event.getGriddingName();
    //再通過網(wǎng)格id來查找對應的網(wǎng)格信息
    GriddingArea griddingArea = getOne(new LambdaQueryWrapper<GriddingArea>().eq(GriddingArea::getId, griddingId));
    griddingName.append(griddingArea.getGriddingName());  //使用同一個StringBuilder對象來操作,這里把獲取到的字符串存入后,事件發(fā)布者那邊就能得到數(shù)據(jù)了。
    System.out.println("griddingName"+griddingName);
}

非常好用??

到此這篇關(guān)于 Spring 事件監(jiān)聽機制實現(xiàn)跨模塊調(diào)用的文章就介紹到這了,更多相關(guān) Spring 事件監(jiān)聽機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)XML增加元素操作簡單示例

    java實現(xiàn)XML增加元素操作簡單示例

    這篇文章主要介紹了java實現(xiàn)XML增加元素操作,結(jié)合簡單實例形式分析了java針對xml格式數(shù)據(jù)的讀取、遍歷、創(chuàng)建等操作技巧,需要的朋友可以參考下
    2017-02-02
  • 如何用Java結(jié)合經(jīng)緯度位置計算目標點的日出日落時間詳解

    如何用Java結(jié)合經(jīng)緯度位置計算目標點的日出日落時間詳解

    這篇文章主詳細講解了如何基于目標點的經(jīng)緯度計算日出日落時間,提供了在線API和Java庫兩種計算方法,并通過實際案例展示了其應用,需要的朋友可以參考下
    2025-01-01
  • 深度理解Java中volatile的內(nèi)存語義

    深度理解Java中volatile的內(nèi)存語義

    前面我們已經(jīng)講過了volatile的作用、底層實現(xiàn)與內(nèi)存屏障,下面就總結(jié)一下整個流程,文中有非常詳細的介紹及圖文示例,需要的朋友可以參考下
    2021-06-06
  • SpringBoot實現(xiàn)海量數(shù)據(jù)高效實時搜索功能

    SpringBoot實現(xiàn)海量數(shù)據(jù)高效實時搜索功能

    我們都知道隨著業(yè)務系統(tǒng)的發(fā)展和使用,數(shù)據(jù)庫存儲的業(yè)務數(shù)據(jù)量會越來越大,逐漸成為了業(yè)務系統(tǒng)的瓶頸,本文給大家介紹了Spring Boot業(yè)務系統(tǒng)如何實現(xiàn)海量數(shù)據(jù)高效實時搜索,文中有詳細的代碼示例,需要的朋友可以參考下
    2023-10-10
  • Spring框架事務屬性中事務隔離級別與傳播行為全面講解

    Spring框架事務屬性中事務隔離級別與傳播行為全面講解

    這篇文章主要介紹了Spring框架聲明式事務的事務隔離級別和事務傳播行為,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-11-11
  • 解讀Spring-boot的debug調(diào)試

    解讀Spring-boot的debug調(diào)試

    這篇文章主要介紹了解讀Spring-boot的debug調(diào)試,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java中幾種常用數(shù)據(jù)庫連接池的使用

    Java中幾種常用數(shù)據(jù)庫連接池的使用

    數(shù)據(jù)庫連接池在編寫應用服務是經(jīng)常需要用到的模塊,太過頻繁的連接數(shù)據(jù)庫對服務性能來講是一個瓶頸,使用緩沖池技術(shù)可以來消除這個瓶頸,本文就來介紹Java常見的幾種,感興趣的可以了解一下
    2021-05-05
  • Spring在代碼中獲取bean的幾種方式詳解

    Spring在代碼中獲取bean的幾種方式詳解

    這篇文章主要介紹了Spring在代碼中獲取bean的幾種方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 詳解Spring Boot 項目中的 parent

    詳解Spring Boot 項目中的 parent

    這篇文章主要介紹了Spring Boot中parent作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • java編程簡單獲取圖片像素的方法

    java編程簡單獲取圖片像素的方法

    這篇文章主要介紹了java編程簡單獲取圖片像素的方法,涉及Java針對圖片的讀取與屬性獲取技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11

最新評論

全椒县| 长治县| 卓资县| 万年县| 盐源县| 吉木萨尔县| 泉州市| 乌什县| 三都| 永泰县| 赫章县| 台湾省| 仁化县| 嘉义县| 额尔古纳市| 临汾市| 白银市| 南和县| 武乡县| 红河县| 通海县| 平安县| 安多县| 嵩明县| 开阳县| 兴宁市| 宝丰县| 三河市| 二手房| 子洲县| 武胜县| 承德市| 临颍县| 平罗县| 玉山县| 都兰县| 三明市| 县级市| 宜城市| 新河县| 津南区|