在我的Spring项目中,我广泛使用vavr库中的集合。有时我需要注入豆类集合。据我所知,Spring只能从JDK注入集合,例如List
,Set
,Map
等。是否可以注入vavr集合?我想做这样的事情:
@Component
class NameResolver {
@Autowired
io.vavr.collection.List<NameMatcher> matchers; // how to make it work?
}
最佳答案
您是正确的,Spring仅支持注入Spring Bean的JDK集合。您可以在其中一个@Bean
类中使用某种桥接@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中。这样可以避免您在注射部位进行包装,因此对于每个bean收集只需要执行一次,而不必为每个@Autowired
注射部位进行一次包装。