Yapıcı ve Alan Enjeksiyonu
Doğru enjeksiyon biçimini seçin.
Yapıcı ve Alan Enjeksiyonu, CoddyKit'te ücretsiz bir Spring Boot 4 Microservices & REST APIs dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Spring Boot 4 Microservices & REST APIs öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Spring Boot 4 Microservices & REST APIs kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
Three Ways to Inject
Spring can inject dependencies three ways: through the constructor, into fields, or via setters. They all work, but they are not equal in quality.
The Spring team and community strongly recommend constructor injection. This lesson explains why.
Field Injection
Field injection places @Autowired directly on a field. It looks compact, but hides the dependency and complicates testing.
@Service
public class OrderService {
@Autowired
private OrderRepository repo;
@Autowired
private PricingService pricing;
}Constructor Injection
Constructor injection declares dependencies as constructor parameters. Spring supplies them when building the bean. Fields can be final, signaling true immutability.
@Service
public class OrderService {
private final OrderRepository repo;
private final PricingService pricing;
public OrderService(OrderRepository repo, PricingService pricing) {
this.repo = repo;
this.pricing = pricing;
}
}No @Autowired Needed
Since Spring 4.3, if a bean has a single constructor, @Autowired is optional. This keeps constructor-injected classes clean and annotation-light.
@Service
public class OrderService {
private final OrderRepository repo;
// single constructor: no @Autowired required
public OrderService(OrderRepository repo) {
this.repo = repo;
}
}Immutability and final
Constructor injection lets every dependency be final. The object is fully initialized once and never changes its collaborators, which prevents accidental reassignment and aids thread safety.
Field injection cannot use final, so the object can exist in a partially built state.
Testability Without Spring
A constructor makes dependencies explicit, so unit tests can build the object directly with mocks — no Spring context, no reflection.
@Test
void placesOrder() {
OrderRepository repo = mock(OrderRepository.class);
PricingService pricing = mock(PricingService.class);
OrderService svc = new OrderService(repo, pricing);
// ... arrange and assert
}Detecting Too Many Dependencies
A bloated constructor is a visible code smell. If a class needs eight collaborators, the long parameter list screams that it does too much. Field injection hides this and lets god-classes grow unnoticed.
Avoiding Circular Dependencies
Constructor injection surfaces circular dependencies at startup with a clear error, because two beans cannot both be constructed first. Field injection can mask the cycle until runtime, leading to subtle bugs.
A startup failure is the right time to discover and fix a design cycle.
Setter Injection
Setter injection suits genuinely optional dependencies that can change after construction. It is rarely needed; prefer constructor injection for required collaborators.
@Service
public class ReportService {
private Formatter formatter = new PlainFormatter();
@Autowired(required = false)
public void setFormatter(Formatter formatter) {
this.formatter = formatter;
}
}Less Boilerplate with Lombok
If constructors feel verbose, Lombok’s @RequiredArgsConstructor generates one from all final fields, giving constructor injection’s benefits with minimal code.
@Service
@RequiredArgsConstructor
public class OrderService {
private final OrderRepository repo;
private final PricingService pricing;
}Why the Recommendation Stands
Constructor injection wins on every axis:
- Immutable, fully initialized objects
- Trivial unit testing without a container
- Cycles and over-dependency become visible
- No reflection-only access for tests
Quick Check
Test your understanding of injection styles.
Recap
Prefer constructor injection.
- Enables
final, immutable dependencies - Single constructor needs no
@Autowired - Unit-testable without the Spring context
- Exposes circular dependencies and over-large classes
- Use setters only for optional, mutable collaborators
Sıkça Sorulan Sorular
“Yapıcı ve Alan Enjeksiyonu” dersi ücretsiz mi?
Evet — “Yapıcı ve Alan Enjeksiyonu” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Spring Boot 4 Microservices & REST APIs kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Spring Boot 4 Microservices & REST APIs kursu toplamda 4 dersten oluşur.
“Yapıcı ve Alan Enjeksiyonu” dersinde ne öğreneceğim?
Doğru enjeksiyon biçimini seçin. Spring Boot 4 Microservices & REST APIs ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Spring Boot 4 Microservices & REST APIs öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Spring Boot 4 Microservices & REST APIs, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Yapıcı ve Alan Enjeksiyonu” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Spring Boot 4 Microservices & REST APIs dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Spring Boot 4 Microservices & REST APIs dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Spring IoC Container
- Yapıcı ve Alan Enjeksiyonu
- Bean Kapsamları
- Yaşam Döngüsü Geri Çağırmaları