Можно ли использовать @Autowired
со списком?
Как у меня есть файл свойств с mimetypes, и в моем файле класса у меня есть что-то вроде этого
@Autowired
private List<String> mimeTypes = new ArrayList<String>();
Можно ли использовать @Autowired
со списком?
Как у меня есть файл свойств с mimetypes, и в моем файле класса у меня есть что-то вроде этого
@Autowired
private List<String> mimeTypes = new ArrayList<String>();
@Qualifier("..")
не рекомендуется, вместо этого попробуйте использовать autwire-by-name, используя
private @Resource(name="..") List<Strings> mimeTypes;
См. также Как сделать autowire factorybean.
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 Заказ готовых коллекций
Вы даже можете создать 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, который был настроен с помощью аннотаций?
Думаю, вам понадобится квалификатор минимум. И призыв к "новому" кажется противоречащим идее использования Spring. У вас запущена роль Spring. Если вы вызываете "новое", то объект находится не под управлением Spring.
Вы должны иметь возможность автоупроверить его, пока список bean. Затем вы должны использовать @Qualifier
, чтобы сообщить Spring, какой bean/list использовать. См. http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation-qualifiers
Если 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
.