目錄
?總結:通用的三種注入方式
1 字段注入
2 構造器注入
3 set注入
?總結:通用的三種注入方式
- 優先使用構造器注入
- 謹慎使用 Setter 注入
- 避免濫用字段注入
- 通過構造器傳入依賴,確保對象創建時即完成初始化。
- 通過 Setter 方法注入依賴,支持動態修改。
- 直接通過反射注入字段,代碼簡潔但隱藏依賴。
1 字段注入
-
核心思想:直接通過反射將依賴注入到字段,無需顯式構造器或 Setter 方法。
-
特點:
-
代碼簡潔:減少樣板代碼。
-
隱藏依賴:依賴關系不透明,不利于單元測試。
-
慎用場景:僅推薦用于快速原型開發或非核心組件。
-
public class ProductService {@Autowiredprivate InventoryService inventoryService; // 直接注入字段
}
2 構造器注入
-
核心思想:通過構造器參數傳入依賴對象,確保 Bean 在實例化時即完成依賴注入。
-
特點:
-
強制依賴:適合不可變(
final
)或必需依賴。 -
線程安全:依賴在對象創建時即被賦值,避免后續修改。
-
推薦方式:Spring 官方推薦的注入方式,尤其適用于單例 Bean。
-
public class OrderService {private final PaymentService paymentService;// 構造器注入(Spring 4.3+ 可省略 @Autowired)@Autowiredpublic OrderService(PaymentService paymentService) {this.paymentService = paymentService;}
}
@RequiredArgsConstructor
public class OrderService {private final PaymentService paymentService;
}
3 set注入
-
核心思想:通過 Setter 方法設置依賴對象,允許依賴在 Bean 創建后動態修改。
-
特點:
-
可選依賴:適合非必需或可變的依賴。
-
靈活性:允許在運行時重新注入依賴(但需注意線程安全)。
-
public class UserService {private DatabaseService databaseService;// Setter 方法注入@Autowiredpublic void setDatabaseService(DatabaseService databaseService) {this.databaseService = databaseService;}
}