Ho classe Circle: classePrimavera ignorando @Qualifier in programma molto semplice
public class Circle
{
@Autowired
@Qualifier("pointA")
private Point center;
public Point getCenter()
{
return center;
}
public void setCenter(Point center)
{
this.center = center;
}
}
punto:
public class Point
{
private int x;
private int y;
public int getX()
{
return x;
}
public void setX(int x)
{
this.x = x;
}
public int getY()
{
return y;
}
public void setY(int y)
{
this.y = y;
}
}
E la mia primavera xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
>
<bean id="pointA" name="pointA" class="SpringTest.Point">
<qualifier value="pointA"/>
<property name="x" value="4"/>
<property name="y" value="4"/>
</bean>
<bean id="pointB" name="pointB" class="SpringTest.Point">
<property name="x" value="2"/>
<property name="y" value="5"/>
</bean>
<bean id="circle" class="SpringTest.Circle">
</bean>
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
</beans>
Per quanto mi preoccupato che questo dovrebbe funzionare in questo modo: 1. Spring vedere l'annotazione @Autowire 2. Spring realiz es che ci sono molti fagioli di tipo Point 3. Spring usa l'annotazione @Qualifier per determinare quale bean iniettare
Purtroppo non funziona così. Durante l'esecuzione di:
AbstractApplicationContext abstractApplicationContext = new ClassPathXmlApplicationContext("spring.xml");
BeanFactory beanFactory = abstractApplicationContext.getBeanFactory();
sto ottenendo un errore:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'circle': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private SpringTest.Point SpringTest.Circle.center; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [SpringTest.Point] is defined: expected single matching bean but found 2: pointA,pointB
Sono principiante in tema di primavera ma credo @Qualifier annotazione dovrebbe fare il lavoro e determinare quali fagioli da utilizzare.
registro di avvio: https://gist.github.com/mmajews/384207ee97b2cc8bd49a
Sì, dovrebbe funzionare correttamente (anche se l'utilizzo della configurazione basata su Java è molto più semplice dell'XML che si sta utilizzando). Per favore pubblica la versione di Spring che stai usando, così come i log di avvio a livello DEBUG. – chrylis
@chrylis Spring version è 4.1.2.RELEASE. Come posso ottenere i log di avvio? –
Come stai facendo funzionare l'applicazione? In generale, devi configurare il tuo logger (log4j o logback) per inviare messaggi da 'org.springframework' a DEBUG. – chrylis