Sin calificar frijol, frijol espera coincidencia única, pero encontró 2

brmd:

He buscado tanto en el Internet y en overlow pila, pero parece que no puede encontrar una solución a mi problema:

Unable to find bean reference for type 'class com.consol.citrus.http.client.HttpClient'Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.consol.citrus.http.client.HttpClient' available: expected single matching bean but found 2: server1BasicAuthClient,server2BasicAuthClient

Para esbozar algunos antecedentes: Tengo que hacer una pequeña aplicación que utiliza Spring 5 y el Marco de la fruta cítrica para automatizar nuestras pruebas de integración.

He definido de la siguiente manera mis frijoles:

@Configuration 
public class EndpointAuthentication {

public String server1Host;

public int server1Port;

public String server2Host;

public int server2Port;

@Bean(name="server1BasicAuthClient")
public com.consol.citrus.http.client.HttpClient server1BasicAuthClient() throws Exception {
    return CitrusEndpoints.http()
            .client()
            .requestUrl(String.format("http://%s:%s/", server1Host, server1Port))
            .requestFactory(sslRequestFactory(server1Host,server1Port))
            .build();
}

@Bean(name="server2BasicAuthClient")
public com.consol.citrus.http.client.HttpClient server2BasicAuthClient() throws Exception {
    return CitrusEndpoints.http()
            .client()
            .requestUrl(String.format("http://%s:%s/", server2Host, server2Port))
            .requestFactory(sslRequestFactory(server2Host,server2Port))
            .build();
}

}

Y he intentado inyectar mi grano de la siguiente manera:

public class AuthenticationIT {

@Autowired
@Qualifier("server1BasicAuthClient")
@CitrusEndpoint
private HttpClient server1BasicAuthClient;

@Autowired
@Qualifier("server2BasicAuthClient")
@CitrusEndpoint
private HttpClient server2BasicAuthClient;
....

}

¿Alguna idea de dónde y cómo solucionar el problema?

Thx por adelantado.

Patel Romil:

Si tiene la intención de expresar la inyección de anotación impulsada por su nombre, no utilice principalmente @Autowired, incluso si es técnicamente capaz de referirse a un nombre de frijol a través de valores @Qualifier. En lugar de ello, utilizar la JSR-250 @Resource anotación, que se semánticamente define para identificar un componente de destino específico por su nombre único, con el tipo declarado ser irrelevante para el proceso de coincidencia.

Como una consecuencia específica de esta diferencia semántica, frijoles que son ellos mismos definen como una colección o escribe el mapa puede no ser inyectado a través de @Autowired, porque el tipo de juego no es propiamente aplicable a ellos. Uso @Resource para este tipo de granos, en referencia a la colección específica o frijol mapa nombre único.

@Autowired aplica a los campos, constructores y métodos múltiples argumentos, lo que permite reducir a través de anotaciones de clasificación en el nivel de parámetros. Por el contrario, @Resource sólo se admite en los campos y métodos setter propiedad de bean con un solo argumento. Como consecuencia, se adhieren con los calificadores si su objetivo es la inyección de un constructor o un método multi-argumento.


Tratar de establecer usando valueen lugar de nameo uso @Primary

@Bean(value="server1BasicAuthClient")
@Bean(value="server2BasicAuthClient")

Consulte 1 Consulte 2

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=210914&siteId=1
Recomendado
Clasificación