在我的Spring项目中,我广泛使用vavr库中的集合。有时我需要注入豆类集合。据我所知,Spring只能从JDK注入集合,例如ListSetMap等。是否可以注入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注射部位进行一次包装。

07-26 04:40