Подтвердить что ты не робот

Spring autowire список

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

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

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

Ответ 1

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

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

См. также Как сделать autowire factorybean.

Ответ 2

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

Пример:

@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 Заказ готовых коллекций

Ответ 3

Вы даже можете создать java.util.List в своем spring.xml и ввести это через @Qualifier в свое приложение. Из springsource 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>[email protected]</value>
   <value>[email protected]</value>
   <value>[email protected]</value>
   <value>[email protected]</value>
 </util:list>

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

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

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

ура!

ИЗМЕНИТЬ

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

Ответ 4

Думаю, вам понадобится квалификатор минимум. И призыв к "новому" кажется противоречащим идее использования Spring. У вас запущена роль Spring. Если вы вызываете "новое", то объект находится не под управлением Spring.

Ответ 6

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

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

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

Естественно, что он ведет себя корректно, даже если вы переопределите mimeTypes bean в другой конфигурации. Нет необходимости в явных аннотациях @Qualifier или @Resource.