Der Container baut Beans und liefert ihnen ihre Mitspieler, Klassen deklarieren also, was sie brauchen, statt es selbst zu konstruieren. Constructor Injection ist zu bevorzugen, weil die Abhängigkeiten verpflichtend und sichtbar sind, die Felder final sein können und das Objekt damit unveränderlich und vollständig initialisiert ist, die Klasse mit einem schlichten new und ohne Reflection testbar bleibt, und eine zirkuläre Abhängigkeit beim Start laut scheitert, statt sich hinter fauler Field Injection zu verstecken.
Warum Interviewer das fragen
Das ist eine Design-Frage im Framework-Kostüm. Der Interviewer will von Testbarkeit und Unveränderlichkeit hören statt von der Mechanik der Annotationen, dazu Bewusstsein für Bean Scopes und die Singleton-Falle, veränderlichen Zustand in eine geteilte Bean zu legen. Ob du erklären kannst, wie du die Klasse ohne Spring-Kontext testest, sagt viel über deine Unit-Test-Gewohnheiten.
So baust du deine Antwort auf
- Beschreib Inversion of Control in einem Satz.
- Nenn die konkreten Vorteile von Constructor Injection.
- Erwähne Scopes und die Gefahr von Zustand in einem Singleton.
- Erklär, wie das deine Tests prägt.
Beispielantwort
Der Container besitzt die Objekterzeugung, meine Klasse fragt also im Konstruktor nach dem, was sie braucht, und Spring löst das auf und injiziert es. Ich nutze Constructor Injection, weil sie den Vertrag sichtbar macht: nimmt eine Klasse fünf Mitspieler entgegen, steht das jetzt in der Signatur, statt über fünf annotierte Felder versteckt zu sein, und meistens sagt mir das, dass die Klasse zu viel macht. Die Felder können final sein, das Objekt ist also vollständig konstruiert und sicher über Threads hinweg zu veröffentlichen, und ich kann es im Test mit schlichten Konstruktorargumenten und ganz ohne Spring-Kontext instanziieren, was Unit-Tests schnell hält. Zirkuläre Abhängigkeiten tauchen außerdem beim Start als Fehler auf, statt übertüncht zu werden. Zu Scopes: Beans sind per Default Singletons, ich halte sie also zustandslos; ein veränderliches Feld auf einem Singleton-Service ist eine Race Condition, die auf nebenläufige Requests wartet. Brauche ich Zustand pro Request, übergebe ich ihn als Methodenparameter, statt zu einer request-scoped Bean zu greifen. Field Injection meide ich aktiv, denn sie versteckt Abhängigkeiten und braucht im Test Reflection zum Aufsetzen.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Wie würdest du mit zwei Beans desselben Typs umgehen?
- Was passiert, wenn du eine Prototype-Bean in ein Singleton injizierst?
- Wie testest du eine Komponente, die vom aktuellen Request abhängt?
Weitere Fragen für Java-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen