久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    springboot通過不同的策略動態調用不同的實現類

     wwq圖書世界 2024-01-23 發布于山東

    1、前言

    經常遇到這樣的一個需求,前端傳的實體類型相同,后端需要根據實體類中的某一個字符串,動態地調用某一個類的方法。

    在SpringBoot中,我們可以理解成,一個Controller接口對應多個ServiceImpl,使用這種方式,如果后期需要添加一個功能,僅僅創建一個ServiceImpl就可以滿足需求,而不用再額外創建一個Controller接口。

    2、代碼演示

    我們先定義一個接口

    1. public interface UserService {
    2. //返回用戶的主要任務
    3. String task();
    4. }

    兩個實現類

    1. @Service("student")
    2. public class StudentServiceImpl implements UserService {
    3. @Override
    4. public String task() {
    5. return "學習";
    6. }
    7. }
    1. @Service("teacher")
    2. public class TeacherServiceImpl implements UserService {
    3. @Override
    4. public String task() {
    5. return "教書";
    6. }
    7. }

    實現動態調用的核心類

    1. @Service
    2. public class UserContext {
    3. @Autowired
    4. Map<String, UserService> userMap;
    5. public UserService getUserService(String type) {
    6. return userMap.get(type);
    7. }
    8. }

    Spring會自動地將形如(@Service后面的名稱,實現該接口的類)注入到該userMap中

    在啟動后,userMap中就存在兩個元素,("student",StudentServiceImpl)與("teacher",TeacherServiceImpl)

    getUserService方法返回userMap中key=type的UserService對象

    實體類

    1. public class User {
    2. private String type;
    3. private String task;
    4. public String getType() {
    5. return type;
    6. }
    7. public void setType(String type) {
    8. this.type = type;
    9. }
    10. public String getTask() {
    11. return task;
    12. }
    13. public void setTask(String task) {
    14. this.task = task;
    15. }
    16. }

    Controller層接口

    1. @RestController
    2. @RequestMapping("/user")
    3. public class UserController {
    4. @Autowired
    5. UserContext userContext;
    6. @PostMapping("/getTask")
    7. public String getTask(@RequestBody User user) {
    8. UserService userService = userContext.getUserService(user.getType());
    9. return userService.task();
    10. }
    11. }

    3、可能用到的場景舉例

    關于庫存的儀表盤統計

    前端傳入區域id,倉庫id,物品id等信息

    后端依據參數動態地選擇某一個物品實現類,最后返回統計的信息。

    這里有幾個問題,為什么不一次性將所有物品id傳入,一次性獲取所有物品的庫存?

    一次性傳入,可能后端處理時間邊長,失敗率也高,一旦失敗,整個儀表盤沒有任何數據。而且后期可能面臨的一個需求,不同的物品,需要有不同的接口刷新速度,暢銷的物品接口調用頻率快。所以可能需要將物品分組,一個小組是同一種類型,使用一個實現類。

    比如,這里有100種物品,按類型或者其他屬性分成了10組,每個組之間,有一個不同的屬性groupId,但10組共用一個接口,進入接口后,再進入10個不同的實現類,在實現類中調用具體的計算邏輯。

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国产成人精品中文字幕| 国产亚洲色视频在线| 99久久久国产精品免费无卡顿| 中文字幕国产原创国产| 秋霞人妻无码中文字幕| 国产成人精品综合在线观看| 中文字幕亚洲制服在线看| 国产又爽又黄又爽又刺激| 欧美日韩精品一区二区三区高清视频 | 夜色爽爽影院18禁妓女影院| 亚洲综合精品第一页| 国精品午夜福利视频不卡| 四虎国产精品永久在线下载| 国产AV无码专区亚洲AV潘金链| 丰满人妻一区二区三区视频53| 亚洲综合色成在线观看| 久久人与动人物a级毛片| 久久久亚洲欧洲日产国码农村 | 久久免费精品国自产拍网站| 国产成人最新三级在线视频| 亚洲春色在线视频| 又色又爽又黄的视频网站 | 国产盗摄xxxx视频xxxx| 中文字幕精品亚洲无线码二区| 国产精品一区中文字幕| 国产AV人人夜夜澡人人爽| 韩国无码AV片午夜福利| 日本高清视频网站www| 欧洲卡一卡二卡三爱区| 午夜福利在线观看6080| 国内精品久久久久久无码不卡| 国产愉拍精品手机| 国产情侣激情在线对白| 女人被爽到高潮视频免费国产| 亚洲最大的熟女水蜜桃AV网站| 亚洲一区二区精品动漫| 激情综合色综合啪啪开心| 精品国产亚洲一区二区三区| 亚洲图片自拍偷图区| 国产在线午夜不卡精品影院| 在线看片免费人成视频电影|