java:接口與實現類

1. Java 基礎層面

  • 接口(Interface) 只是方法的定義/規范,里面沒有真正的邏輯。

  • 例如:

    public interface IBookService {boolean save(Book book);
    }
    

    👉 這里只說明了:我要有一個 save 方法,但“怎么保存”沒有寫。

  • 實現類(Implementation) 才是具體干活的地方:

    @Service
    public class BookServiceImpl implements IBookService {@Overridepublic boolean save(Book book) {// 真正調用 Mapper/DAO 去執行 INSERT 語句return baseMapper.insert(book) > 0;}
    }
    

如果只有接口沒有實現類,那么調用 bookService.save(book) 時就會找不到“怎么執行”的邏輯,運行時會報錯。


2. 在 MyBatis-Plus 里

MyBatis-Plus 已經幫我們準備好了一套通用實現邏輯:

  • 接口:IService<T> (定義了常見 CRUD 方法)

  • 實現類:ServiceImpl<M,T>(幫你實現了大部分方法)

所以我們才會寫:

public interface IBookService extends IService<Book> {}
@Service
public class BookServiceImpl extends ServiceImpl<BookDao, Book>implements IBookService {}

這樣你就獲得了很多現成的方法:

  • bookService.save(book)

  • bookService.updateById(book)

  • bookService.removeById(id)

  • bookService.page(page)

  • ……

👉 如果你只寫 IBookService,沒有對應的 BookServiceImpl,Spring 容器里就不會有一個真正的 Bean 去執行這些方法,你的 @Autowired 注入就會失敗(報 NoSuchBeanDefinitionException)。


3. 為什么不直接用接口?

  • 接口是規范,解耦:上層代碼依賴接口而不是實現,方便以后換不同實現。

  • 有了接口,你可以有多個實現類,比如:

    • BookServiceImpl → 使用 MyBatis-Plus 訪問數據庫

    • BookServiceCacheImpl → 帶緩存邏輯

    • BookServiceMockImpl → 測試用的假實現

這樣 Controller 層代碼完全不用改,只要注入不同實現即可。


4. 總結

  • 接口 = 定義功能(做什么)

  • 實現類 = 實現功能(怎么做)

  • 在 Spring/MP 項目里,接口讓你分層清晰、依賴解耦;實現類讓系統真正能運行。


👉 所以:
IBookService 是抽象的“業務契約”,
BookServiceImpl 是具體的“業務實現”,
兩者配合才能在 Spring 項目中工作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94336.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94336.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Chrome 插件開發實戰:從入門到進階

1.1 Chrome 插件的魅力與應用場景Chrome 插件是增強 Chrome 瀏覽器功能的得力助手&#xff0c;能實現廣告攔截、密碼管理、標簽管理等實用功能。在日常辦公中&#xff0c;我們可以借助插件提升效率&#xff0c;如自動填充表單、快速保存網頁內容&#xff1b;在瀏覽網頁時&#…

通過官方文檔詳解Ultralytics YOLO 開源工程-熟練使用 YOLO11實現分割、分類、旋轉框檢測和姿勢估計(附測試代碼)

目錄 前言&#xff1a; 1.了解ultralytics工程與yolo模型 1.1 yolo11可以為我們做些什 1.2 yolo11模型的高性能 1.3 對于yolo11一些常見的問題 1.3.1 YOLO11 如何以更少的參數實現更高的精度&#xff1f; 1.3.2 YOLO11 可以部署在邊緣設備上嗎&#xff1f; 2. 深入了解y…

vue實現小程序oss分片上傳

隨著小程序越來越普及,小程序上傳文件必不可少,那么上傳的文件大小就不可控了,小則幾mb,大到好幾百mb,小文件還可以,但是一到超過200mb或稍微再大些的小程序就很容易上傳失敗,導致功能不能繼續進行。以下我們就來解決這個問題,將大文件實現分片上傳 溫馨提示,不要看內…

14.Shell腳本修煉手冊--玩轉循環結構(While 與 Until 的應用技巧與案例)

while 循環和 until 循環的應用實踐 文章目錄while 循環和 until 循環的應用實踐當型和直到型循環&#xff1a;兩種 "重復" 的邏輯while 循環&#xff1a;滿足條件就繼續until 循環&#xff1a;不滿足條件就繼續基礎示例&#xff1a;從簡單場景學用法示例 1&#xff…

chromadb使用hugging face模型時利用鏡像網站下載注意事項

chromadb默認使用sentence-transformers/all-MiniLM-L6-v2的詞嵌入&#xff08;詞向量&#xff09;模型&#xff0c;如果在程序首次運行時&#xff0c;collection的add或query操作時如果沒有指定embeddings或query_embeddings&#xff0c;程序會自動下載相關嵌入向量模型&#…

基于大模型的對話式推薦系統技術架構設計

注&#xff1a;此文章內容均節選自充電了么創始人&#xff0c;CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》&#xff08;跟我一起學人工智能&#xff09;【陳敬雷編著】【清華大學出版社】 清華《GPT多模態大模型與AI Agent智能體》書籍配套視頻課程【陳敬雷…

第1章 React組件開發基礎

在掌握React開發之前,我們需要先建立扎實的組件開發基礎。這些基礎知識不僅影響你的開發效率,更決定了應用程序的性能、可維護性和團隊協作的順暢程度。 本章將深入探討React組件開發的核心技巧,從JSX語法優化到組件架構設計,幫你建立正確的React開發思維模式。 ??? 本…

【yocto】Yocto Project 配置層(.conf)文件語法詳解

【加關注&#xff0c;不迷路&#xff0c;持續輸出中...】Yocto Project 是一個開源的嵌入式 Linux 系統構建框架&#xff0c;其核心是通過元數據&#xff08;Metadata&#xff09;來定義如何構建系統。這些元數據主要包括配方&#xff08;.bb / .bbappend&#xff09;、配置&am…

知識蒸餾 Knowledge Distillation 序列的聯合概率 分解成 基于歷史的條件概率的連乘序列

知識蒸餾 Knowledge Distillation 序列的聯合概率 分解成 基于歷史的條件概率的連乘序列 flyfish 代碼實踐 論文 Generalized Knowledge Distillation (GKD) On-Policy Distillation of Language Models: Learning from Self-Generated Mistakes 自回歸分解 將 “序列的聯合…

React15.x版本 子組件調用父組件的方法,從props中拿的,這個方法里面有個setState,結果調用報錯

在React 15.x中&#xff0c;子組件通過props調用父組件包含setState的方法時出現錯誤&#xff0c;最常見的原因是父組件方法的this指向丟失&#xff0c;導致調用setState時出現Cannot read property setState of undefined之類的錯誤。 核心原因 React類組件的方法默認不會綁定…

交叉編譯.so到鴻蒙使用

以下是在 Ubuntu 20.04 系統上的操作&#xff0c;tpc_c_cplusplus 他是把編譯的流程都給寫進去了&#xff0c;你只需要關注你要編譯的庫配置好環境就行了。 第一步&#xff1a;下載 tpc_c_cplusplus 倉庫地址&#xff1a; GitCode - 全球開發者的開源社區,開源代碼托管平臺…

LLaMA-Factory 中配置文件或命令行里各個參數的含義

常見參數分類 & 含義對照表&#xff1a; &#x1f539;模型相關參數含義model_name_or_path基礎模型的路徑&#xff08;本地或 HuggingFace Hub 上的名字&#xff0c;如 meta-llama/Llama-2-7b-hf&#xff09;adapter_name_or_pathLoRA/Adapter 權重路徑&#xff08;如果要…

JavaScript 性能優化實戰技術文章大綱

一、引言1.1 背景闡述在當今 Web 應用高度交互化、復雜化的趨勢下&#xff0c;JavaScript 作為核心腳本語言&#xff0c;其性能優劣直接決定了用戶體驗的好壞。從單頁應用&#xff08;SPA&#xff09;的流暢運行&#xff0c;到復雜數據可視化的實時交互&#xff0c;JavaScript …

正點原子【第四期】Linux之驅動開發學習筆記-2.1LED燈驅動實驗(直接操作寄存器)

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“正點原子【第四期】手把手教你學Linux系列課程之 Linux驅動開發篇”視頻的學習筆記&#xff0c;該課程配套開發板為正點原子alpha/mini Linux開發板。在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內…

【GM3568JHF】FPGA+ARM異構開發板 測試命令

本章節的命令操作均在板卡的終端執行 1 初探/sys目錄 與/proc目錄類似&#xff0c;/sys目錄下的文件/文件夾向用戶提供了一些關于設備、內核模塊、文件系統以及其他內核組件的信息&#xff0c; 如子目錄block中存放了所有的塊設備&#xff1b;子目錄bus中存放了系統中所有的總…

【Win】Motrix+Aria2瀏覽器下載加速

系統安裝Motrix Motrix官網下載&#xff0c;推薦下載NSIS Installer 安裝版 瀏覽器安裝Aria2 下載Aria2插件&#xff0c;然后開發者模式安裝到瀏覽器 Aria2擴展選項的配置如下&#xff1a; 端口號需要改成Motrix的&#xff0c;默認是16800

SpringBoot applicationContext.getBeansOfType獲取某一接口所有實現類,應用于策略模式

本文介紹了如何在Springboot項目中通過ApplicationContext獲取接口的實現類&#xff0c;并通過枚舉策略模式避免if/else&#xff0c;展示了如何使用getBeansOfType獲取TrafficModeService的實現&#xff0c;以及如何在實際場景中應用&#xff0c;如查詢交通方式費用 1 在實際工…

大模型問題:幻覺分類+原因+各個訓練階段產生幻覺+幻覺的檢測和評估基準

1. 什么是幻覺&#xff1f;大模型出現幻覺&#xff0c;簡而言之就是“胡說八道”。 用《A Survey on Hallucination in Large Language Models》1文中的話來講&#xff0c;是指模型生成的內容與現實世界事實或用戶輸入不一致的現象。 研究人員將大模型的幻覺分為事實性幻覺&…

智慧冷庫物聯網解決方案——實現降本增效與風險可控的冷庫管理新范式

一、冷庫管理痛點設備孤島化&#xff1a;冷庫品牌、型號分散&#xff0c;缺乏統一接入標準&#xff0c;數據互通難&#xff0c;依賴人工巡檢&#xff0c;故障響應滯后。能耗黑洞&#xff1a;制冷系統能耗占冷庫總運營成本的60%以上&#xff0c;傳統管理粗放&#xff0c;缺乏動態…

太空生活的八種要素

數代以來&#xff0c;科學家們一直在銀河系中搜尋地外行星存在生命的證據。他們試圖找到一組特定的環境條件與化學物質&#xff0c;在恰當的時間、恰當的地點交匯融合。 通過研究人類、植物、動物及微生物在地球上的生存與繁衍方式&#xff0c;科學家們已識別出生命演化所需的關…