Весенняя автопрокатная роспись - PullRequest
28 голосов
/ 07 июня 2011

Можно ли использовать @Autowired со списком?

Как будто у меня есть файл свойств с mimetypes, и в моем файле класса есть что-то вроде этого

@Autowired
private List<String> mimeTypes = new ArrayList<String>();

Ответы [ 6 ]

42 голосов
/ 15 декабря 2015

Spring 4 поддерживает возможность автоматического сбора всех bean-компонентов данного типа и добавления их в коллекцию или массив.

Пример:

@Component
public class Car implements Vehicle {
}

@Component
public class Bus implements Vehicle {
}

@Component
public class User {
   @Autowired
   List<Vehicle> vehicles;//contains car and bus
}

Ссылка: Spring 4 Заказ коллекций с автопроводкой

33 голосов
/ 06 октября 2011

@Qualifier("..") не рекомендуется, вместо этого попробуйте autowire-by-name , используя

private @Resource(name="..") List<Strings> mimeTypes;

См. Также Как автоматически подключить фабрику .

10 голосов
/ 07 июня 2011

Вы даже можете создать java.util.List в своем весеннем .xml и вставить его через @Qualifier в свое приложение.Из источника http://static.springsource.org/spring/docs/current/reference/xsd-config.html:

 <!-- creates a java.util.List instance with the supplied values -->
 <util:list id="emails">
   <value>pechorin@hero.org</value>
   <value>raskolnikov@slums.org</value>
   <value>stavrogin@gov.org</value>
   <value>porfiry@gov.org</value>
 </util:list>

Таким образом, это изменит вашу проводку на:

 @Autowired
 @Qualifier("emails")
 private List<String> mimeTypes = new ArrayList<String>();

Я бы предложил этот подход, так как вы вводите список строкв любом случае.

ура!

РЕДАКТИРОВАТЬ

Если вы хотите ввести свойства, взгляните на это Как я могу ввести значение свойства в Spring Bean, который был настроен с использованием аннотаций?

1 голос
/ 07 июня 2011

Я думаю, вам понадобится квалификатор как минимум.И призыв к «новому» кажется противоречащим идее использования Spring.Вы перепутали роль Спринг.Если вы называете «new», то объект не находится под контролем Spring.

0 голосов
/ 10 октября 2016

Если бин с автопроводкой объявлен в том же (@Configuration) классе, и вам нужно, чтобы он объявил другой бин, то работает следующее:

@Bean
public BeanWithMimeTypes beanWithMimeTypes() {
    return new BeanWithMimeTypes(mimeTypes());
}

@Bean
public List<String> mimeTypes() {
    return Arrays.<String>asList("text/html", "application/json);
}

Естественно, он ведет себя правильно, даже если вы переопределите *Боб 1005 * в другом конфиге.Нет необходимости в явных аннотациях @Qualifier или @Resource.

0 голосов
/ 07 июня 2011

Вы должны иметь возможность автоматически связывать его, пока список является бином.Затем вы использовали бы @Qualifier, чтобы сообщить Spring, какой бин / список использовать.Смотри http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation-qualifiers

...