Автопроводка не работает в 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, является более или менее ошибкой, потому что ваш код нарушает общее ограничение)

Другие вопросы по тегам