在我的Spring项目中,我广泛使用vavr库中的集合。有时我需要注入豆类集合。据我所知,Spring只能从JDK注入集合,例如List
,Set
,Map
等。有什么方法可以注入vavr集合吗?我想做这样的事情:
@Component
class NameResolver {
@Autowired
io.vavr.collection.List<NameMatcher> matchers; // how to make it work?
}
答案 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
注射部位进行包装。