Latihan Dependency Injection Spring Boot
Pada artikel kali ini kita akan latihan dependency injection (DI) di spring boot, DI yang akan kita coba antara lain field injection, setter injection dan constructor injection.
Daftar Isi
Setup project
Pertama kita setup projectnya terlebih dahulu, masuk ke start.spring.io kemudian pilih project maven, bahasa java pilih versi terbaru, saat artikel ini dibuat versi terbaru 3.2.2.

Kemudian isi project meta data sesuai dengan preferensi masing-masing.

Berikutnya tambahkan dependency. Dalam hal ini kita cukup menambahkan dependency Spring Web (wajib) dan Lombok (optional).

Setelah itu bisa klik generate. Kemudian download, extract hasil generate dan buka di editor kalian masing-masing.

Service dan Controller
Berikutnya kita akan buat service dan controller yang sederhana. Kita mulai dari membuat class service dan controller, Buat folder service dalam api sejajar dengan main class atau dalam hal ini file ApiApplication.java
. Kemudian buat file HalloDuniaService.java.
setelah itu buat controller dengan membuat folder controller dalam api dan buat file CondingduluajaContoller.java
.

kemudian kita buat service seperti dibawah ini. Kita tidak akan membahas service secara detail dan fokus ke penggunaan dependency injection saja.
package com.codingduluaja.api.service;
import org.springframework.stereotype.Service;
@Service
public class HalloDuniaService {
public String sayHello() {
return "Hello Dunia";
}
}
Dependency Injection
Kita masuk ke bagian utama tutorial kali ini yaitu dependency injection. kita akan melakukan DI dengan meng-inject service yang sudah kita buat diatas ke dalam controller yang kita miliki.
Contructor Injection
pertama kita akan menerapkan menggunakan contructor injection sebagai berikut.
package com.codingduluaja.api.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import com.codingduluaja.api.service.HalloDuniaService;
import java.util.*;
@Controller
public class CodingduluajaController {
private HalloDuniaService halloDuniaService;
public CodingduluajaController(HalloDuniaService halloDuniaService) {
this.halloDuniaService = halloDuniaService;
}
@GetMapping("/hai")
public ResponseEntity<?> sayHello() {
return ResponseEntity.ok(Collections.singletonMap("message",halloDuniaService.sayHello()));
}
}
silakan jalankan applikasi, bisa melalui feature yang di sediakan edit ataupun langsung menggunakan terminal dengan perintah mvn spring-boot:run
, kemudian coba hit endpoint /hai
yang telah kita buat dengan menggunakan postman atau langsung dr browser.

Setter Injection
modifikasi controller sebelumnya menjadi seperti ini, kemudian test kembali, apakah hasilnya sama seperti sebelumnya. dan jangan lupa tambahkan anotasi @Autowired
di setter kalian.
package com.codingduluaja.api.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import com.codingduluaja.api.service.HalloDuniaService;
import java.util.*;
@Controller
public class CodingduluajaController {
private HalloDuniaService halloDuniaService;
@Autowired
public void setHalloDuniaService(HalloDuniaService halloDuniaService) {
this.halloDuniaService = halloDuniaService;
}
@GetMapping("/hai")
public ResponseEntity<?> sayHello() {
return ResponseEntity.ok(Collections.singletonMap("message",halloDuniaService.sayHello()));
}
}
Field Injection
Modifikasi controller sebelumnya menjadi seperti dibawah ini, kemudian test kembali apakah hasilnya sama seperti sebelumnya. perlu diketahui bahwa field injection sudah tidak disarankan lagi untuk digunakan karena performanya yg kurang baik.
package com.codingduluaja.api.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import com.codingduluaja.api.service.HalloDuniaService;
import java.util.*;
@Controller
public class CodingduluajaController {
@Autowired
private HalloDuniaService halloDuniaService;
@GetMapping("/hai")
public ResponseEntity<?> sayHello() {
return ResponseEntity.ok(Collections.singletonMap("message",halloDuniaService.sayHello()));
}
}
demikian tutorial kali ini, selamat berlatih.