es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Necesito crear dos objetos de una interfaz en una clase Java.

Tengo un problema, tengo una interfaz y esa interfaz se implementa en dos clases. Necesito crear dos objetos de una interfaz. Entonces, un objeto para la clase aCluud y otro para la clase bCluud, y puedo acceder al método a través del objeto. Ejemplo:

Interfaz:

public interface clousservice{
    public void getA();
    public void getB();
}

Clases:

public class aCluud implements clousservice{
    public void getA(){
        // algún código Java
    }

    public void getB() {
        // algún código Java
    }
}

public class bCluud implements clousservice{
    public void getA(){
        // algún código Java
    }

    public void getB() {
        // algún código Java
    }
}

Acceso a la interfaz en diferentes clases:

public class task {
    private final clousservice service;

    public task(clousservice service){
        this.service = service;
    }
}

Cuando inicio un servidor, obtengo el siguiente mensaje:

El parámetro 0 del constructor en au.com.task.Task requiere un solo bean, pero se encontraron 2.

¿Cómo puedo lograr esta funcionalidad? Para esto estoy usando Java 11 y Spring Boot.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear dos objetos de una implementación de una única interfaz en Spring Boot con Java 11, puedes utilizar la anotación @Qualifier para especificar qué implementación utilizar para cada objeto.

    Ejemplo:

    En tu clase de tarea, utiliza la anotación @Qualifier para diferenciar entre las dos implementaciones:

    public class Tarea {
        private final Clousservice aService;
        private final Clousservice bService;
    
        public Tarea(@Qualifier("aCluud") Clousservice aService, @Qualifier("bCluud") Clousservice bService) {
            this.aService = aService;
            this.bService = bService;
        }
    
        // Ahora puedes llamar a los métodos de aService y bService según sea necesario
    }
    

    En tu archivo o clase de configuración de Spring Boot, define los beans para cada implementación, especificando la anotación @Qualifier según sea necesario:

    @Configuration
    public class AppConfig {
        @Bean
        @Qualifier("aCluud")
        public Clousservice aCluud() {
            return new ACluud();
        }
    
        @Bean
        @Qualifier("bCluud")
        public Clousservice bCluud() {
            return new BCluud();
        }
    }
    

    Ahora, cuando inicies tu servidor, Spring Boot sabrá qué implementación utilizar para cada objeto en tu clase de tarea.

Comments are closed.