84 votes

Spring injecte des dépendances dans le constructeur sans l'annotation @Autowired

Je suis en train d'expérimenter avec des exemples de ce Printemps tutoriels et il y a une dépendance sur ce code:
https://github.com/spring-guides/gs-async-method/tree/master/complete

Si vous regardez le code de la AppRunner.java la classe, j'ai 2 questions:

1) Quand le serveur est de partir, si j'ai mis un point d'arrêt dans le constructeur de cette classe, il semble que dans le constructeur, le GitHubLookupService est prévue pour le printemps, à l'aide de l' @Service bean qui a été configuré. MAIS, il n'y avait pas @Autowired annotation sur le constructeur, alors, comment dans le monde de ce constructeur appelée avec le bouton droit de la dépendance? Il était censé être null.

Est-ce un postulat de Printemps de Démarrage?
N'Printemps voir "domaine privé + argument du constructeur, et il suppose qu'il doit rechercher un haricot?
Est-ce le Printemps-Cadre ou le Printemps de démarrage?
Ai-je raté quelque chose?

2) Comme je m'en souviens, c'était mendatory de fournir constructeur par défaut pour les haricots / service, etc. Comment se fait cette classe (AppRunner) n'a pas de constructeur par défaut? Comment ne Ressort sait qu'il doit exécuter le constructeur avec l'argument? Est-ce parce que c'est le seul constructeur?

184voto

dunni Points 8810

En commençant par le Printemps 4.3, si une classe, qui est configuré comme un Printemps bean, n'a qu'un seul constructeur, l' Autowired d'annotation peut être omis et le Printemps va utiliser ce constructeur et injecter toutes les dépendances nécessaires.

Concernant le constructeur par défaut: Vous devez soit le constructeur par défaut, un constructeur avec l' Autowired d'annotation lorsque vous avez plusieurs constructeurs, ou seulement un constructeur dans votre classe avec ou sans l' Autowired d'annotation.

Lire le "@Autocâblés" chapitre de l'officiel du Printemps de la documentation pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X