Konstruktor- oder Feldinjektion
Wählen Sie den passenden Injektionsstil.
Konstruktor- oder Feldinjektion ist eine kostenlose Spring Boot 4 Microservices & REST APIs-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Spring Boot 4 Microservices & REST APIs-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Spring Boot 4 Microservices & REST APIs-Kurs umfasst insgesamt 4 Lektionen.
Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.
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
Häufig gestellte Fragen
Ist die Lektion „Konstruktor- oder Feldinjektion“ kostenlos?
Ja — der vollständige Text von „Konstruktor- oder Feldinjektion“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Spring Boot 4 Microservices & REST APIs-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Spring Boot 4 Microservices & REST APIs-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Konstruktor- oder Feldinjektion“?
Wählen Sie den passenden Injektionsstil. Du übst Spring Boot 4 Microservices & REST APIs mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Spring Boot 4 Microservices & REST APIs zu starten?
Keine Vorkenntnisse erforderlich. Spring Boot 4 Microservices & REST APIs auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Konstruktor- oder Feldinjektion“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Spring Boot 4 Microservices & REST APIs-Lektion Code schreiben und ausführen?
Ja. Jede Spring Boot 4 Microservices & REST APIs-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Der Spring-IoC-Container
- Konstruktor- oder Feldinjektion
- Bean-Scopes
- Lifecycle-Callbacks