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

Spring @Inject 無法使用而 @Autowired 正常的原因

     編輯:程式設計綜合問答

現象

Spring 項目中使用 @Autowired 注入正常,改用 JSR-330 標準的 @Inject 則報錯「找不到符號」或注入失效。

根本原因

@Inject 定義在 javax.inject 包中,不屬於 Spring 核心庫,需額外引入依賴:

<!-- Maven -->
<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

或 Gradle:

implementation 'javax.inject:javax.inject:1'

兩者區別

特性@Autowired@Inject
來源Spring 專有JSR-330 標準
required 屬性支持 required=false無,強制要求存在
配合 @Qualifier支持配合 @Named
提供者Spring 容器任何兼容 JSR-330 容器

最佳實踐

  • 若項目強綁定 Spring,優先用 @Autowired 功能更豐富。
  • 若追求標準化、可移植性,引入 javax.inject 使用 @Inject + @Named。
  • Spring 3.0+ 同時支持兩者,只需確保類路徑有 JSR-330 jar。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved