Question d'entretien pour Développeur Java

Comment fonctionne l'injection de dépendances dans Spring, et pourquoi préférez-vous l'injection par constructeur ?

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Le conteneur construit les beans et fournit leurs collaborateurs, donc les classes déclarent ce dont elles ont besoin au lieu de le construire. L'injection par constructeur est préférable parce que les dépendances sont obligatoires et visibles, les champs peuvent être final donc l'objet est immuable et entièrement initialisé, la classe est testable avec un simple new sans réflexion, et une dépendance circulaire échoue bruyamment au démarrage au lieu de se cacher derrière une injection de champ paresseuse.

Pourquoi les recruteurs posent cette question

C'est une question de conception déguisée en question de framework. Le recruteur veut entendre parler de testabilité et d'immuabilité plutôt que de la mécanique des annotations, plus une conscience des scopes et du piège du singleton avec de l'état mutable dans un bean partagé. Savoir expliquer comment vous testeriez la classe sans contexte Spring en dit long sur vos habitudes de tests unitaires.

Comment structurer votre réponse

  • Décrivez l'inversion de contrôle en une phrase.
  • Donnez les avantages concrets de l'injection par constructeur.
  • Mentionnez les scopes et le danger de l'état dans un singleton.
  • Expliquez comment cela façonne vos tests.

Exemple de réponse

Exemple parlé, à la première personne

Le conteneur possède la création des objets, donc ma classe demande ce dont elle a besoin dans son constructeur et Spring le résout et l'injecte. J'utilise l'injection par constructeur parce qu'elle rend le contrat évident : si une classe prend cinq collaborateurs, c'est désormais visible dans la signature au lieu d'être caché dans cinq champs annotés, et ça me dit en général que la classe en fait trop. Les champs peuvent être final, donc l'objet est entièrement construit et sûr à publier entre threads, et je peux l'instancier dans un test avec de simples arguments de constructeur, sans aucun contexte Spring, ce qui garde les tests unitaires rapides. Les dépendances circulaires apparaissent aussi au démarrage comme un échec plutôt que d'être masquées. Côté scope, les beans sont des singletons par défaut, donc je les garde sans état ; un champ mutable sur un service singleton est une situation de compétition qui attend des requêtes concurrentes. Quand il me faut de l'état par requête, je le passe en paramètre de méthode plutôt que de dégainer un bean à portée requête. L'injection de champ, je l'évite activement, puisqu'elle cache les dépendances et exige de la réflexion pour être mise en place dans un test.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Comment géreriez-vous deux beans du même type ?
  • Que se passe-t-il quand vous injectez un bean prototype dans un singleton ?
  • Comment testez-vous un composant qui dépend de la requête en cours ?

Autres questions pour Développeur Java

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot