Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

167
Vistas
Crear solo una instancia de bean desde la interfaz

Tengo una interfaz llamada IpAssginer y dos clases que implementan IpAssginer llamadas CloudIpAssginer y DHCPClientService.

Estoy tratando de configurar un IpAssginer predeterminado para usar en función de cierta información sobre el inicio del sistema.

El siguiente código lo hace con éxito, pero se están creando dos instancias del bean seleccionado:

 @Configuration public class BeanConfiguration { @Autowired private ShellUtilsService shellUtilsService; @Autowired private IpAssginer cloudIpAssginer; @Autowired private IpAssginer dhcpClientService; @Bean(name = "ipAssginer") public IpAssginer ipAssginer() { HwType hwType = shellUtilsService.getHwType(); IpAssginer ipAssginer = hwType.isInCloud() ? cloudIpAssginer : dhcpClientService; Log.Management.info("{} IpAssginer created with type: {}", this.getClass().getSimpleName(), ipAssginer.getIPAssginerType()); return ipAssginer; } }

¿Alguna idea de cómo puedo hacer lo mismo pero crear solo una instancia del bean seleccionado?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

También puede usar la anotación @Bean para crear Spring Bean, eliminar las anotaciones estereotipadas de la clase CloudIpAssginer y DhcpClientService , y luego usar la anotación @Bean en la clase @Configuration

 @Configuration public class BeanConfiguration { @Autowired private ShellUtilsService shellUtilsService; @Bean(name = "ipAssginer") public IpAssginer ipAssginer() { HwType hwType = shellUtilsService.getHwType(); IpAssginer ipAssginer = hwType.isInCloud() ? new CloudIpAssginer() : new DhcpClientService(); Log.Management.info("{} IpAssginer created with type: {}", this.getClass().getSimpleName(), ipAssginer.getIPAssginerType()); return ipAssginer; } }
over 4 years ago · Santiago Trujillo Denunciar

0

Una solución que funcionó para mí:

Excluí el IpAssigner del contexto y funcionó con el siguiente código:

 @Configuration public class BeanConfiguration { @Autowired private ShellUtilsService shellUtilsService; @Bean(name = "ipAssginer") @DependsOn("cloudApiService") public IpAssigner ipAssginer() { HwType hwType = shellUtilsService.getHwType(); IpAssigner ipAssginer = hwType != null && hwType.isInCloud() ? new CloudIpAssginer() : new DHCPClientService(); return ipAssginer; } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda