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

Spring 註解驅動開發:@Component 掃描、@Autowired 裝配、@Qualifier 消歧義完整指南

     編輯:Java 綜合教學

Spring 註解驅動開發:@Component 掃描、@Autowired 裝配、@Qualifier 消歧義完整指南

Spring 3+ 支援組件掃描自動發現 Bean,配合 `@Autowired`/`@Resource`/`@Inject` 實現零 XML 裝配。本文詳解掃描配置、四大層級註解、自動裝配規則、多候選消歧義、數組/集合/Map 注入與實戰 MVC 分層範例。

1. 組件掃描配置

  • `base-package`(必填):掃描根包及子包,多包用逗號分隔。
  • `resource-pattern`(選填):Ant 模式過濾類文件,如 `dao/*.class` 僅掃描 dao 包。
  • 自動註冊 `AutowiredAnnotationBeanPostProcessor`,啟用 `@Autowired`/`@Resource`/`@Inject` 處理。

2. 刻板印象註解

註解語意層級特殊行為
@Component通用組件基礎註解,其他三者繼承語意
@Repository持久層 DAO自動轉換持久化異常為 Spring DataAccessException
@Service業務邏輯層標識業務邊界,便於 AOP 切點匹配
@Controller表現層Spring MVC 識別,配合 @RequestMapping

默認 Bean 名稱:非限定類名首字母小寫(`userDaoImpl` → `userDaoImpl`)。可指定:`@Service("myService")`。

3. @Autowired 自動裝配規則

  • 適用位置:**構造器**、**字段**、**任意多參方法**(含 Setter)。
  • 默認 `required=true`:找不到匹配 Bean 拋 `NoSuchBeanDefinitionException`。允許可選:`@Autowired(required=false)`。
  • **按類型匹配**:容器中**唯一**兼容類型 → 直接注入;**多個**兼容類型 → 拋 `NoUniqueBeanDefinitionException`,需配合 `@Qualifier` 指定名稱。
  • 支援注入:數組(`Bean[]`)、集合(`List`)、Map(`Map` key 為 Bean 名)。

4. @Qualifier 消歧義

或直接 `@Resource(name="userDaoImpl")`(JSR-250,按名稱優先)。

5. 實戰 MVC 分層範例


6. 配置文件 beans.xml


7. 測試驗證


最佳實踐建議

  1. **構造器注入優先**:不可變依賴、便於單測、避免循環依賴。
  2. **分層包結構**:`dao`/`service`/`controller` 獨立包,配合 `resource-pattern` 精準掃描。
  3. **避免字段注入 `@Autowired`**:隱式依賴、反射賦值繞過構造器、難以在非 Spring 環境實例化。
  4. **主配置類 Java Config 替代 XML**:`@ComponentScan("com.wang")` + `@Import` 組合配置。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved