【问题标题】:Spring - inject vavr collectionsSpring - 注入 vavr 集合
【发布时间】:2019-06-13 11:35:15
【问题描述】:

在我的 Spring 项目中,我广泛使用了来自 vavr 库的集合。有时我需要注入 bean 的集合。据我所知,Spring 只能从 JDK 注入集合,例如ListSetMap等有没有办法注入vavr集合?我想做这样的事情:

@Component
class NameResolver {

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

【问题讨论】:

  • 是的,您可以自动装配此集合。但它应该在 Maven 依赖项列表中。
  • 有什么奇怪的?我在类路径上有 vavr 库。
  • 然后你可以将你的 jar 放在 Nexus 存储库中,你可以在 maven 中添加
  • 我确实有这种依赖。我从 Maven Central mvnrepository.com/artifact/io.vavr/vavr/0.10.0 获取它
  • 只要有该类型的列表作为可用的 bean,Spring 就会注入它。它不会自动注入该类型的 bean,它只会对 JDK 集合执行此操作。一种解决方法是注入普通集合,并在需要时将其包装在 vavr 中。

标签: java spring collections autowired vavr


【解决方案1】:

你说得对,Spring 只支持注入 Spring bean 的 JDK 集合。您可以在您的 @Configuration 类中使用一种 bridge @Bean 工厂方法来解决此问题,类似于:

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

...

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

通过以上内容,您创建了一个 vavr List,它也是一个 Spring bean,因此您可以将其 @Autowire 用于其他 Spring bean。它使您免于在注入点进行包装,因此您只需为每个 bean 集合执行一次,而不是为每个 @Autowired 注入点执行一次。

【讨论】:

    猜你喜欢
    • 2021-04-04
    • 2020-07-02
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多