在我的 Spring 项目中,我广泛使用来自vavr库的集合。有时我需要注入 bean 的集合。据我所知,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);
}
通过以上内容,您创建了一个List
也是 Spring bean 的 vavr,因此您可以@Autowire
将其放入其他 Spring bean。它使您免于在注射部位进行包装,因此您只需为每个 bean 集合做一次,而不是为每个@Autowired
注射部位做一次。