notacion - Spring inyecta dependencias en el constructor sin anotación @Autowired
que es un bean en spring (1)
Estoy experimentando con ejemplos de estos tutorials oficiales de Spring y hay una dependencia en este código:
https://github.com/spring-guides/gs-async-method/tree/master/complete
Si miras el código en la clase AppRunner.java , tengo 2 problemas:
1) Cuando el servidor se está iniciando, si coloco un punto de interrupción en el constructor de esta clase, parece que en el constructor, el GitHubLookupService lo proporciona Spring, utilizando el bean @Service que se configuró. PERO, no había una anotación @Autowired
en el constructor, así que, ¿cómo en el mundo se llama a este constructor con la dependencia correcta? Se suponía que era null
.
¿Es un supuesto automático de Spring Boot ?
¿Spring ve "el campo privado + el argumento del constructor, y asume que debería buscar un bean apropiado?
¿Es Spring Framework o Spring Boot ?
¿Me estoy perdiendo de algo?
2) Como recuerdo, fue obligatorio proporcionar el constructor predeterminado a beans / service, etc. ¿Por qué esta clase (AppRunner) no tiene un constructor predeterminado? ¿Cómo sabe Spring que debe ejecutar el constructor con el argumento? ¿Es porque es el único constructor?
Comenzando con Spring 4.3 , si una clase, que está configurada como un bean Spring, tiene solo un constructor, la anotación Autowired
puede omitirse y Spring utilizará ese constructor e inyectará todas las dependencias necesarias.
Con respecto al constructor predeterminado : o necesita el constructor predeterminado, un constructor con la anotación Autowired
cuando tiene varios constructores, o solo un constructor en su clase con o sin la anotación Autowired
.
Lea el capítulo "@Autowired" de la documentación oficial de Spring para obtener más información.