目錄
1. 構造器注入
2. 字段注入
3. Setter注入
4. 方法注入
最佳實踐建議
1. 構造器注入
@Service
public class UserService {private final UserRepository userRepository;@Autowired // Spring 4.3+ 可以省略public UserService(UserRepository userRepository) {this.userRepository = userRepository;}
}
?特點是:
- 通過類的構造方法注入依賴
- 不可變的依賴(final屬性)
- 推薦使用, 特別是對于強制依賴
- 便于單元測試
2. 字段注入
@Service
public class UserService {@Autowireprivate UserRepository userRepository;
}
特點是:
- ?直接在字段上加@Autowir
- 代碼簡潔,但不夠靈活
- 不能用于final字段
-
不推薦使用(難以測試,隱藏依賴關系)
3. Setter注入
@Service
public class UserService {private UserRepository userRepository;@Autowiredpublic setUserRepository(UserRepository userRepository) {this.userRepository = userRepository;}
}
?特點是:
-
通過setter方法注入依賴
-
適用于可選依賴
-
允許對象在創建后被重新配置
-
比字段注入更易于測試
4. 方法注入
@Service
public class UserService {private UserRepository userRepository;@Autowiredpublic publish(UserRepository userRepository) {this.userRepository = userRepository;}
}
特點:
-
通過任意方法注入依賴
-
方法名可以自定義,不限于setter
-
可以用于初始化邏輯
-
支持多個參數注入
最佳實踐建議
-
優先使用構造器注入?- 特別是對于強制依賴
-
可選依賴使用setter注入
-
避免使用字段注入?- 雖然方便但不利于測試和維護
-
對于復雜初始化邏輯使用方法注入