Study
Spring Boot

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.

Editor Latihan

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.