Автопроводка не работает в Spring 4
У меня есть следующий исходный пример, который работает в Spring 3.2.6, но не работает в 4.0.1
public interface RunTest<T extends Number> {
void run(T number);
}
public class BasicRunTest implements RunTest<Integer>{
@Override
public void run(Integer number) {
}
}
@Component
public class BeanTest {
@Autowired
private RunTest<Number> runTest;
}
Если я запускаю приложение, я получаю исключение:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.test.RunTest] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
1 ответ
Это новая функция Spring: Spring теперь обрабатывает универсальные типы как форму квалификатора при введении Beans, или другими словами: autowire обращает внимание на универсальный тип!
У тебя есть BasicRunTest implements RunTest<Integer>
(Целое число) и попросить весну @Autowire prive RunTest<Number> runTest;
(Номер) - это не совместимо!
пытаться
private RunTest<? extends Number> runTest;
(То, что он работал с Spring 3.x, является более или менее ошибкой, потому что ваш код нарушает общее ограничение)