@Autowired
всегда работает с экземплярами класса, а не типов. Вы определили 3 типа: A
, B
и C
, но не создали ни одного экземпляра из них.
Для автоустройства вам необходимо создать эти экземпляры, а также зарегистрировать их с помощью Spring. Здесь происходит конфигурация XML или конфиг Java. Это в основном короткая форма для создания экземпляров Spring. Таким образом, вы можете указать:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ApplicationConfiguration {
@Bean
public B someA() {
return new B();
}
@Bean
public C anotherA() {
return new C();
}
@Bean
public B evenMoreA() {
return new B();
}
}
Это дает вам 3 независимых экземпляра фасоли (а не список). Для получения дополнительной информации см. Java-based container configuration.
Теперь весна будет выполнять поиск всех бобов типа A
в этих пакетах и заполнить ваш класс Aggregator
со всеми тремя компонентами.
ПРИМЕЧАНИЕ: Эти бобы не обязательно должны быть в одном файле. Они могут быть объявлены в любом месте вашего пакета @ComponentScan
.
Как спросил комментарий, что, если вы хотите иметь только некоторые из этих случаев?
Если вы хотите только , некоторые из фасоль, добавленные в ваш список, ситуация более сложная. Вам нужно будет переместить исключенные компоненты в отдельный класс @Configuration
, в другой пакет. Вы не должны добавлять этот новый пакет к пакетам Spring @ComponentScan
, поэтому Spring не найдет эти компоненты для добавления в список. Насколько я знаю, это единственный способ.
Конечно, если вы хотите только одну фасоль, то, как обычно, вы должны автоустанавливать ее с помощью @Qualifier
и указать имя компонента. В этом случае вы не используете List
, а только переменную типа A
.
Я спросил, как это сделать без конфигурации, только в java. – aclokay
@ user1050389 ah достаточно справедливо, добавит пример JavaConfig. – metacubed
Вы упомянули, что он дает три независимых компонента, а не список. Будет ли эта работа этими независимыми компонентами быть автоуведомленными как список? В противном случае он не отвечает на вопрос. О.К. Я вижу, что вы ссылались на это. Благодаря! – aclokay