2011-02-11 36 views
5

[resorte 3.0.5] [jboss 5,1]Java/Problema del resorte con @Service y @Autowired anotaciones

Tengo varias clases etiquetados como @Service, que implementa thet misma interfaz.

Por ejemplo,

@Service(value="test1") 
public TestImpl1 implements Test {} 
@Service(value="test2") 
public TestImpl2 implements Test {} 

A continuación, tiene la siguiente estructura

public SomeClass { 
@Autowired 
@Qualifier("test1") 
Test test1; 
@Autowired 
@Qualifier("test2") 
Test test2; 

Me estoy haciendo una excepción (al despliegue)

10:36:58,277 ERROR [[/test-web]] Servlet /test-web threw load() 
exception 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No 
unique bean of type [pl.tests] is defined: expected single matching 
bean but found 2: [test1, test2] 
     at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.doReso lveDependency(DefaultListableBeanFactory.java: 
796) 
     at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolv eDependency(DefaultListableBeanFactory.java: 
703) 
     at 
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostPro cessor 
$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java: 
474) 

Alguien sabe cómo resolver este ?

T.

+0

¿Cuál es 'pl.tests'? – skaffman

+0

lo siento, pl.tests.SomeClass – user6778654

Respuesta

4

algunas opciones:

  • @Resource(name="test1") uso en el punto de inyección
  • puede utilizar el mecanismo de javax.inject.Qualifer. En resumen: defina una anotación (@Test) y anote la anotación con @Qualifier. Luego use @Autowired @Test en el punto de inyección.
  • establecen explícitamente calificadores en el bean de destino. Los documentos dicen que sólo muestran la versión XML <qualifier />, pero trate de añadir @Qualifier("test1") en la definición de servicio

Here is the documentation about it

+0

Ok, cambié el código a algo así como. @Resource (name = "test1") TestImpl1 pública implementa Prueba {} @Resource (name = "test2") TestImpl2 pública implementa Prueba {} Y en el bean destino // pero que es irrelevante para este problema public SomeClass { @Autowired @Qualifier ("test1") Test test1; Recibo una excepción (en la implementación) No se ha encontrado ningún bean de tipo [pl.Test] encontrado para la dependencia: se espera al menos 1 bean que califique como candidato de autowire para esta dependencia. Anotaciones de dependencia: {@ org.springframework.beans.factory.annotation.Autowired (required = true)} – user6778654

+0

@ user612925 por "punto de inyección" me refiero al punto donde se inyecta, no a la definición del servicio. – Bozho

+0

Hice lo que escribió en este momento. Parece que el problema está en las mismas clases de declaración que los servicios. Ahora tengo el código: @Service (value = "test1") public TestImpl1 implementa Test {} @Service (value = "test2") public TestImpl2 implementa Test {} Sin punto de inyección. Tengo la misma excepción: se define: espera única que empareja el frijol pero encontré 2: [test1, test2] – user6778654

Cuestiones relacionadas