Dependency Injection: @Autowired & Constructor Injection
Penjelasan
Spring Boot punya container Dependency Injection SANGAT KUAT sejak awal — bean (objek yang dikelola Spring) di-inject lewat constructor Controller/Service lain. @Autowired bisa ditulis eksplisit di constructor, tapi kalau class hanya punya SATU constructor, Spring Boot modern OTOMATIS meng-inject tanpa perlu annotation itu sama sekali.
Contoh Konsep
@Service
public class HargaService {
public double hitungDenganPajak(double harga) {
return harga * 1.11;
}
}
@RestController
public class ProdukController {
private final HargaService hargaService;
// @Autowired opsional di sini karena cuma ada satu constructor
public ProdukController(HargaService hargaService) {
this.hargaService = hargaService;
}
@GetMapping("/produk/harga")
public double harga() {
return hargaService.hitungDenganPajak(100000);
}
}
Praktikum
Buat @Service DiskonService dengan method hitung(double harga, double persenDiskon) yang mengembalikan harga setelah dikurangi diskon. Buat ArtikelController yang meng-inject DiskonService lewat constructor dan memakainya di satu endpoint.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Constructor injection (dipakai di contoh) LEBIH DIREKOMENDASIKAN dibanding field injection langsung dengan @Autowired di atas properti — constructor injection memaksa field jadi final (immutable) dan memudahkan unit test karena dependency-nya jelas terlihat sebagai parameter constructor.