¿Qué pasa si existen dos beans del mismo tipo y lo inyectas sin más información?
Opciones
- Spring elige uno de los beans al azar
- El arranque falla (NoUniqueBeanDefinition); usa
@Primary(Opción correcta) - Spring inyecta los dos beans en el mismo campo
- 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.