春季-注入VAVR系列

时间:2019-06-13 11:35:15

标签: java spring collections autowired vavr

在我的Spring项目中,我广泛使用vavr库中的集合。有时我需要注入豆类集合。据我所知,Spring只能从JDK注入集合,例如ListSetMap等。有什么方法可以注入vavr集合吗?我想做这样的事情:

@Component
class NameResolver {

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

1 个答案:

答案 0 :(得分:2)

您是正确的,Spring仅支持注入Spring Bean的JDK集合。您可以在您的@Bean类之一中使用一种 bridge @Configuration工厂方法来解决此问题,类似于:

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

...

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

使用上述方法,您创建了一个也是Spring Bean的vavr List,因此您可以@Autowire将其转化为其他Spring Bean。这样可以避免您在注射部位进行包装,因此,您只需为每个收集的豆类进行一次包装,而不必为每个@Autowired注射部位进行包装。