Весна - добавить коллекции vavr - PullRequest
1 голос
/ 13 июня 2019

В своем проекте Spring я широко использую коллекции из библиотеки vavr .Иногда мне нужно ввести коллекцию бобов.Насколько я знаю, Spring может вставлять только коллекции из JDK, например, List, Set, Map и т. Д. Есть ли способ внедрить коллекцию vavr?Я хотел бы сделать что-то вроде этого:

@Component
class NameResolver {

    @Autowired
    io.vavr.collection.List<NameMatcher> matchers; // how to make it work?
}

1 Ответ

2 голосов
/ 14 июня 2019

Вы правы, что Spring поддерживает инъекцию только JDK-коллекций Spring Bean.Вы можете обойти это с помощью метода bridge @Bean factory в одном из ваших @Configuration классов, аналогично следующему:

import io.vavr.collection.List;
import java.util.Collection;

...

@Bean
public List<NameMatcher> vavrMatchers(Collection<NameMatcher> matchers) {
    return List.ofAll(matchers);
}

С вышеописанным вы создалиvavr List, который также является bean-компонентом Spring, поэтому вы можете @Autowire использовать его с другими bean-компонентами Spring.Это избавляет вас от обертывания в месте инъекции, поэтому вам придется делать это только один раз для каждой коллекции бобов, а не один раз для каждого @Autowired места введения.

...