public class TestBean { private List<TestDep> deps; @Autowired public void setTestDeps(List<TestDep> deps) { this.deps = deps; } } public class TestDep { } <beans> <context:annotation-config/> <bean id="testBean" class="test.TestBean" scope="prototype"/> <bean id="testDep" class="test.TestDep"/> </beans> public class Test { public static void main(String[] args) { ClassPathXmlApplicationContext ctx = ... ctx.getBean("testBean"); ctx.getBean("testBean"); } }pierwsze wywołanie ctx.getBean("testBean") zadziała poprawnie, ale drugie (i każde następne) zgłosi wyjątek IllegalArgumentException: argument type mismatch. Problemy powoduje kod odpowiedzialny za cache'owanie referencji do komponentów w klasie wewnętrznej AutowiredAnnotationBeanPostProcessor.AutowiredMethodElement. Wpisałem zgłoszenie do JIRY (numer SPR-4438) i po 39 minutach (!) błąd został poprawiony, a poprawka włączona do wersji 2.5.2. Rewelacja. [aktualizacja 2008.03.04] Wersja 2.5.2 została wydana wczoraj i AutowiredAnnotationBeanPostProcessor działa w niej poprawnie.
2008-02-08
Problem z adnotacją @Autowire w Springu 2.5.1
Bug ujawnia się dość specyficznej sytuacji: jeżeli używamy automatycznego rozwiązywania zależności (autowiring) opartego na adnotacjach, mamy komponent nie będący singletonem i mający przynajmniej jeden atrybut będący kolekcją. W poniższym przykładzie:
Subskrybuj:
Komentarze do posta (Atom)
1 komentarz
Świetnie, że ten problem tak wcześnie zauważyłeś. Twój post okazał się bardzo pomocny. Ja miałem analogiczny problem z @Scope("session") i także w tym przypadku wersja 2.5.2 pomogła.
Pozdrawiam Mirek Karczewski
Prześlij komentarz