首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring 核心註解速查表:組件掃描與依賴注入

     編輯:Java 綜合教學

Spring 核心註解速查表:組件掃描與依賴注入

Spring 註解驅動開發已成主流,掌握核心註解的語義與適用場景是高效開發的前提。本文梳理組件註解與注入註解的核心差異與最佳實踐。

一、組件註解(標識 Bean 定義)

註解層級語義建議場景
@Controller控制層標識 Spring MVC 控制器處理 HTTP 請求、返回視圖/JSON
@Service業務層標識業務邏輯組件事務邊界、核心業務流程編排
@Repository持久層標識 DAO 組件,自動轉換持久化異常資料庫操作、MyBatis/JPA Mapper
@Component通用泛型組件標識,無特定語義工具類、配置類、無法歸類組件

原理:四者均繼承自 @Component,@ComponentScan 掃描時同等對待。語義化分層有利於代碼閱讀、AOP 切點精準匹配(如 @Transactional 僅切 @Service)。

二、注入註解(裝配依賴)

註解來源匹配策略關鍵屬性推薦度
@ResourceJSR-250 (J2EE)byName → byTypename、type★★★★★ 減少 Spring 依賴
@AutowiredSpringbyType → byName (配合 @Qualifier)required (default true)★★★★ 功能更豐富

@Resource 詳細規則

  1. 若指定 name,按名稱查找;找不到拋異常。
  2. 未指定 name,預設為欄位名/方法名(setter 去掉 set 首字母小寫),按名稱查找。
  3. 名稱查找失敗,退回到按類型查找;若多個候選則拋異常。

@Autowired 詳細規則

  1. 優先按類型查找;唯一候選直接注入。
  2. 多個候選時,嘗試按欄位名/參數名匹配 Bean 名稱。
  3. 仍無法唯一確定,需配合 @Qualifier("beanName") 指定。
  4. @Autowired(required=false) 允許找不到時保持 null。

三、最佳實踐建議

  • 構造子注入:不可變依賴、便於單元測試、避免循環依賴。Spring 4.3+ 單構造子可省略 @Autowired。
  • 首選 @Resource:標準規範、語義清晰(按名稱)、遷移成本低。
  • 集合注入:@Autowired List<Plugin> plugins 自動注入所有同類型 Bean,順序可用 @Order 控制。
  • 避免字段注入:難測試、隱藏依賴、反射開銷。

四、常見陷阱

  • 同一接口多實現未加 @Qualifier 或 @Primary 導致啟動失敗。
  • @Resource 在類級別使用時需指定 name,否則不生效。
  • Kotlin 中需注意 lateinit 與構造子注入配合。

五、總結

語義化使用 @Controller/@Service/@Repository,依賴注入優先 @Resource(按名)輔以 @Autowired(按類型),構造子注入為首選方式。掌握匹配規則,告別「找不到 Bean」與「多個候選」的啟動報錯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved