Latihan Dependency Injection Spring Boot

Beranda » Java » Spring Boot » 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.

tampilan setup latihan dependency injecntion spring boot
Setup project spring boot

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

tampilan setup project metadata.
Setup project metadata

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

tampilan dependency yang dibutuhkan.
Dependency yang dibutuhkan.

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

generate project.
Generate project

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.

tampilan struktur folder project.
Struktur folder project

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.

tampilan hasil tes api di browser
Hasil tes api di 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.

Kategori : Java, Spring Boot, Tutorial
Oleh : budiyono, diterbitkan : disunting :