欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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進(jìn)行引用字符串操作,來獲取需要的值
	//上面是業(yè)務(wù)相關(guān)
       getUserInfoEvent event = new getUserInfoEvent(this,"發(fā)布“獲取用戶信息”事件",griddingId,griddingName); //定義事件
       applicationEventPublisher.publishEvent(event);  //發(fā)布事件
       //下面是獲取到數(shù)據(jù)之后的操作,不重要
       //這里事件是同步進(jìn)行的
       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è)務(wù)相關(guān)代碼
    Integer griddingId = event.getGriddingId();
    StringBuilder griddingName = event.getGriddingName();
    //再通過網(wǎng)格id來查找對應(yīng)的網(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之HashMap.values()轉(zhuǎn)List時的錯誤和正確演示

    Java之HashMap.values()轉(zhuǎn)List時的錯誤和正確演示

    這篇文章主要介紹了Java之HashMap.values()轉(zhuǎn)List時的錯誤和正確演示,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java中線程的sleep()方法和yield()方法的區(qū)別

    java中線程的sleep()方法和yield()方法的區(qū)別

    本文主要介紹了java中線程的sleep()方法和yield()方法的區(qū)別,Thread類的sleep()方法使線程休眠指定時間,不釋放鎖,而yield()提示調(diào)度器當(dāng)前線程愿意讓出CPU資源,不保證立即切換線程,感興趣的可以了解一下
    2024-10-10
  • Java?easyexcel使用教程之導(dǎo)出篇

    Java?easyexcel使用教程之導(dǎo)出篇

    EasyExcel是阿里巴巴開源的一個excel處理框架,以使用簡單,節(jié)省內(nèi)存著稱,下面這篇文章主要給大家介紹了關(guān)于Java?easyexcel使用教程之導(dǎo)出篇的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • MyBatisPlus使用@TableField注解處理默認(rèn)填充時間的問題

    MyBatisPlus使用@TableField注解處理默認(rèn)填充時間的問題

    這篇文章主要介紹了MyBatisPlus使用@TableField注解處理默認(rèn)填充時間的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java比較兩個list是否相同equals的代碼詳解

    java比較兩個list是否相同equals的代碼詳解

    在本篇文章里小編給大家分享的是關(guān)于java比較兩個list是否相同equals的代碼詳解,有需要的朋友們可以參考學(xué)習(xí)下。
    2020-02-02
  • Java 語言守護(hù)線程 Daemon Thread使用示例詳解

    Java 語言守護(hù)線程 Daemon Thread使用示例詳解

    這篇文章主要為大家介紹了Java 語言守護(hù)線程 Daemon Thread使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 使用Java第三方實現(xiàn)發(fā)送短信功能

    使用Java第三方實現(xiàn)發(fā)送短信功能

    這篇文章主要介紹了使用Java第三方實現(xiàn)發(fā)送短信功能,在一些開發(fā)中,經(jīng)常需要有給用戶發(fā)送短信接收驗證碼的功能,那么在Java中該如何實現(xiàn)呢,今天我們就一起來看一看
    2023-03-03
  • J2ee 高并發(fā)情況下監(jiān)聽器實例詳解

    J2ee 高并發(fā)情況下監(jiān)聽器實例詳解

    這篇文章主要介紹了J2ee 高并發(fā)情況下監(jiān)聽器實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java?Cookie與Session實現(xiàn)會話跟蹤詳解

    Java?Cookie與Session實現(xiàn)會話跟蹤詳解

    session的工作原理和cookie非常類似,在cookie中存放一個sessionID,真實的數(shù)據(jù)存放在服務(wù)器端,客戶端每次發(fā)送請求的時候帶上sessionID,服務(wù)端根據(jù)sessionID進(jìn)行數(shù)據(jù)的響應(yīng)
    2022-11-11
  • SpringBoot 中html的頁面間跳轉(zhuǎn)問題小結(jié)

    SpringBoot 中html的頁面間跳轉(zhuǎn)問題小結(jié)

    這篇文章主要介紹了SpringBoot 中html的頁面間跳轉(zhuǎn)問題小結(jié),本文給大家分享兩種方法,結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10

最新評論