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

Eli*_*ion 6 interface multiple-instances java-ee cdi managed-bean

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

我们还有一个Baz包含数据成员的类List<IFoo> fooList.是否可以将所有这些IFoo类动态注入fooList

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

Jen*_*gsa 10

使用该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) {
            // ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这完全有道理,例如,如果要合并多个服务提供者实现的结果.你会找到一个很好的学习的榜样这里.

也可以看看: