Repaso
English
Spring, JPA y Java WebIntermedioSPR-13

¿Qué pasa si existen dos beans del mismo tipo y lo inyectas sin más información?

Opciones

  1. Spring elige uno de los beans al azar
  2. El arranque falla (NoUniqueBeanDefinition); usa @Primary (Opción correcta)
  3. Spring inyecta los dos beans en el mismo campo
  4. No falla nada y el campo se inyecta como null

Respuesta

El arranque falla con NoUniqueBeanDefinitionException; se resuelve con @Primary o @Qualifier

Por qué

Si PaymentGateway tiene dos implementaciones (StripeGateway, PaypalGateway), Spring no puede saber cuál quieres y falla al arrancar (es bueno: te enteras de inmediato).

Soluciones: marca una como @Primary (opción por defecto), usa @Qualifier("stripeGateway") en el punto de inyección, o inyecta List<PaymentGateway> / Map<String, PaymentGateway> si las quieres todas.

Recuerda

Ambigüedad => @Primary o @Qualifier.

Términos clave

Practica esta pregunta en Repaso