Otomatik kablo Listesi açıklama kullanarak şema NoSuchBeanDefinitionException verir
Adında bir listesi <util:list id="myList">
İlkbahar türü Dize fasulye koleksiyonu için yerine arıyor ad Bahar açıklama kullanarak enjekte etmek istediğim bir fasulye var. Benim kırık testi:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class ListInjectionTest {
@Autowired @Qualifier("myList") private List<String> stringList;
@Test public void testNotNull() {
TestCase.assertNotNull("stringList not null", stringList);
}
}
İçeriği:
<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>
Ama olsun
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)
Bu iş için bekleniyordu yol olacağını düşündüm benim gibi çok Bulmaca.
CEVAP
Bu @Autowired davranışlarının oldukça karanlık bir bölüm, 3.11.2. @Autowired belirtilen kaynaklanmaktadır:
Aynı zamanda bütün sağlamaktır bu belirli bir tür fasulye Ekleyerek
ApplicationContext
alan ya da yönteme Açıklama Bu beklediği türden bir dizi...Aynı yazılan koleksiyonları için geçerlidir...
@Autowired @Qualifier("myList") List<String>
aslında istiyorsun diyerek başka bir deyişle, "beni niteleyici türü java.lang.String
tüm fasulye listesini ver "". myList
Çözüm 3.11.3. Fine-tuning annotation-based autowiring with qualifiers söz edilir:
Eğer ifade etmek istiyorsanız adı açıklama tahrikli enjeksiyon, öncelikle
@Autowired
- bile kullanmayın başvuran yetenekli ise@Qualifier
fasulye bir isim değerler. Bu genel amaçlı-250 tercih ederim bunun yerine Olan@Resource
açıklama anlamsal bir tanımlamak için tanımlanan onun tarafından belirli bir hedef bileşeni benzersiz bir ad, ilan türü ile varlık eşleştirme için alakasız süreç.Bu belirli bir sonucu olarak semantik fark, hangi fasulye bir topluluk olarak kendilerini tanımlanan veya harita türü ile enjekte edilemez Uyumu olmadığından
@Autowired
kendileri için geçerli olan düzgün.Kullanın 15* *böyle fasulye için atıfta özel koleksiyon göster bean/ benzersiz bir ad.
Yani sınavda bu kullanın, ve gayet iyi çalışıyor:
@Resource(name="myList") private List<String> stringList;
Dinamik hücre düzenleri için UİTableVi...
Herhangi bir parametre Listesi içinde ...
Visual Studio Klavye Kısayolu otomatik...
CSS kullanarak :ve hatta :pseudo-sınıf...
Neden Listesi<T>.Dosyalarda grup...