@Autowired bật tự động inject — Spring resolve và inject bean phù hợp. Đặt được trên constructor, setter, field. Resolve mặc định by type; nhiều bean cùng type → ambiguity, fix bằng @Qualifier("beanName") tại điểm inject hoặc @Primary trên bean mặc định. Dependency optional: @Autowired(required = false).
Quy tắc:
- ✅ Constructor injection — rõ ràng, final, dễ test; class có 1 constructor duy nhất thì không cần ghi @Autowired (Spring 4.3+).
- ❌ Field injection — ẩn dependency, cần reflection để mock.
- Setter injection cho dependency optional.
Lombok @RequiredArgsConstructor tự sinh constructor cho final field — cách viết constructor injection gọn phổ biến.