一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

springboot通過不同的策略動(dòng)態(tài)調(diào)用不同的實(shí)現(xiàn)類

 wwq圖書世界 2024-01-23 發(fā)布于山東

1、前言

經(jīng)常遇到這樣的一個(gè)需求,前端傳的實(shí)體類型相同,后端需要根據(jù)實(shí)體類中的某一個(gè)字符串,動(dòng)態(tài)地調(diào)用某一個(gè)類的方法。

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

2、代碼演示

我們先定義一個(gè)接口

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

兩個(gè)實(shí)現(xiàn)類

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

實(shí)現(xiàn)動(dòng)態(tài)調(diào)用的核心類

  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會(huì)自動(dòng)地將形如(@Service后面的名稱,實(shí)現(xiàn)該接口的類)注入到該userMap中

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

getUserService方法返回userMap中key=type的UserService對(duì)象

實(shí)體類

  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、可能用到的場景舉例

關(guān)于庫存的儀表盤統(tǒng)計(jì)

前端傳入?yún)^(qū)域id,倉庫id,物品id等信息

后端依據(jù)參數(shù)動(dòng)態(tài)地選擇某一個(gè)物品實(shí)現(xiàn)類,最后返回統(tǒng)計(jì)的信息。

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

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

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产女高清在线看免费观看 | 亚洲高清亚洲欧美一区二区| 中文字幕精品一区二区三| 欧美日韩一区二区综合| 中日韩美女黄色一级片| 欧美一二三区高清不卡| 日韩中文字幕在线不卡一区| 欧美中文字幕一区在线| 亚洲乱码av中文一区二区三区 | 激情五月天深爱丁香婷婷| 在线观看视频国产你懂的| 国产超碰在线观看免费| 欧美日韩精品久久第一页| 日韩欧美黄色一级视频| 麻豆剧果冻传媒一二三区| 日韩精品少妇人妻一区二区| 亚洲丁香婷婷久久一区| 国产精品日本女优在线观看| 国产一区麻豆水好多高潮| 男生和女生哪个更好色| 高潮日韩福利在线观看| 久久精品国产第一区二区三区| 偷拍偷窥女厕一区二区视频| 在线观看视频成人午夜| 国产日韩中文视频一区| 夜色福利久久精品福利| 欧美欧美欧美欧美一区| 亚洲人午夜精品射精日韩| 亚洲欧美日韩国产自拍| 国产又色又爽又黄的精品视频| 手机在线不卡国产视频| 精品香蕉一区二区在线| 亚洲熟女国产熟女二区三区| 欧美多人疯狂性战派对| 在线观看视频成人午夜| 欧美野外在线刺激在线观看 | 欧美精品二区中文乱码字幕高清| 91精品视频全国免费| 中文字幕中文字幕一区二区| 超碰在线播放国产精品| 欧美日韩三区在线观看|