Bağımlılık Enjeksiyonu (Dependency Injection - DI), Spring Boot'un temel konseptlerinden biridir ve daha gevşek bağlılık ve artan test edilebilirlik sağlar. Bu kılavuz, Java ve Kotlin ile Spring Boot'ta DI kullanımını pratik örneklerle açıklar.
Yazan
Şuayb Şimşek
Spring Boot, güvenlik, mikroservis ve cloud-native mimari konularında pratik teknik notlar paylaşan backend odaklı fullstack geliştirici.
Bağımlılık Enjeksiyonu'nu göstermek için basit bir servis tanımlayın.
🛠️ Adım 3: Bağımlılıkları Enjekte Edin
Servisi diğer bileşenlere enjekte etmek için anotasyonları kullanın.
▶️ Uygulamayı Çalıştırın
Uygulamayı aşağıdaki komutlarla çalıştırın:
Spring Boot (Java/Kotlin):
Kurulumun doğru çalıştığını doğrulamak için uygulamayı tercih ettiğiniz dil yığınıyla başlatın.
BASH
./mvnw spring-boot:run
API'ye şu adresten erişin: http://localhost:8080/api/users.
🧪 API'yi Test Edin
API'yi aşağıdaki cURL komutlarıyla test edebilirsiniz:
Tüm kullanıcıları alın
Bu istekle liste endpoint’inin döndürdüğü temel veri yapısını hızlıca doğrulayabilirsiniz.
BASH
curl -X GET http://localhost:8080/api/users
Belirli bir kullanıcıyı alın
Bu istek, path parametresi ile tekil kaynak erişiminin doğru çalıştığını doğrulamak için kullanılır.
BASH
curl -X GET http://localhost:8080/api/users/1
🏁 Sonuç
Artık Dependency Injection için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.
Servis
JAVAUserService.java
package com.example.demo.service;
import org.springframework.stereotype.Service;
@Service
public class UserService {
public String getUserById(String id) {
return "ID ile kullanıcı: " + id;
}
public String getAllUsers() {
return "Tüm kullanıcılar alınıyor.";
}
}
Servis
KOTLINUserService.kt
package com.example.demo.service
import org.springframework.stereotype.Service
@Service
class UserService {
fun getUserById(id: String): String {
return "ID ile kullanıcı: $id"
}
fun getAllUsers(): String {
return "Tüm kullanıcılar alınıyor."
}
}
Controller
JAVAUserController.java
package com.example.demo.controller;
import com.example.demo.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@GetMapping("/{id}")
public String getUserById(@PathVariable String id) {
return userService.getUserById(id);
}
@GetMapping
public String getAllUsers() {
return userService.getAllUsers();
}
}
Controller
KOTLINUserController.kt
package com.example.demo.controller
import com.example.demo.service.UserService
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("/api/users")
class UserController(
private val userService: UserService
) {
@GetMapping("/{id}")
fun getUserById(@PathVariable id: String): String = userService.getUserById(id)
@GetMapping
fun getAllUsers(): String = userService.getAllUsers()
}