Ich habe eine Bean, die ich mit einer benannten Liste unter Verwendung des Spring-Util-Namespace injizieren möchte, <util:list id="myList">
aber Spring sucht stattdessen nach einer Sammlung von Beans vom Typ String. Mein gebrochener Test ist:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class ListInjectionTest {
@Autowired @Qualifier("myList") private List<String> stringList;
@Test public void testNotNull() {
TestCase.assertNotNull("stringList not null", stringList);
}
}
Mein Kontext ist:
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<util:list id="myList">
<value>foo</value>
<value>bar</value>
</util:list>
</beans>
Aber ich verstehe
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [java.lang.String] found for dependency [collection of java.lang.String]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=myList)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:726)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:571)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412)
Was mich eher verwirrt, als ich dachte, dass dies so funktionieren würde, wie es erwartet wurde.
Eine andere Sache, die passieren könnte, ist, dass Sie eine Eigenschaft einer Bohne automatisch verdrahten. In diesem Fall müssen Sie es nicht automatisch verdrahten, sondern erstellen einfach die Setter-Methode und verwenden das Eigenschaftstag in der Bean-Definition (bei Verwendung von XML). Beispiel:
Und die Klasse:
Siehe, keine
@Autowired
Anmerkung in der Klasse.quelle