使用 CDI 注入所有相同类型的 beans

Injecting all beans of the same type with CDI

假设我们有一个包含 classes 的包 foos,它们都实现了一些 IFoo.

我们还有一个 class,Baz 其中包含一个数据成员 List<IFoo> fooList。 是否可以将所有这些 IFoo class 动态注入到 fooList 中?

顺便问一下,这是一种常见的做法吗? (我是 DI 概念的新手)

使用javax.enterprise.inject.Instance接口动态获取Foo的所有实例:

import javax.annotation.PostConstruct;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;

public class Baz {

    @Inject
    Instance<Foo> foos;

    @PostConstruct
    void init() {
        for (Foo foo : foos) {
            // ...
        }
    }
}

这完全有道理,例如如果你想合并多个服务提供者实现的结果。你找个学习的好例子here.

另请参阅: