小编Aar*_*n L的帖子

如何使用 CDI 注入第三方实例化的对象

我有一个由第三方代码实例化的类(它使用反射来创建对象。)我提供他们的接口的实现,他们创建对象。在我的实现中,我想使用 CDI 注入执行逻辑的服务。这样做的正确方法是什么?

public interface ThirdPartyInterface {
    public void DoSomething();
}

public class InjectedService {
    public void DoSomeLogic() { ... }
}

public class MyImplementation implements ThirdPartyInterface {
    @Inject InjectedService service;

    @Override
    public void DoSomething() {
        service.DoSomeLogic();
    }
}
Run Code Online (Sandbox Code Playgroud)

我原本以为这可以通过 CDI 的魔力来实现,但发现我的服务对象为空。

到目前为止我唯一想到的就是在构造函数中手动注入服务

 public MyImplementation() {
     CDI<Object> cdi = CDI.current();
     service = cdi.select(InjectedService.class).get();
 }
Run Code Online (Sandbox Code Playgroud)

这是获取实例的正确/唯一/最佳方式吗?我正在使用 Weld 来实现 CDI。

我还发现这可以在构造函数中工作:

    public MyImplementation() {
        CDI<Object> cdi = CDI.current();
        BeanManager bm = cdi.getBeanManager();
        AnnotatedType<MyImplementation> myType = bm.createAnnotatedType(MyImplementation.class);
        Set<Bean<?>> beans = bm.getBeans(MyImplementation.class);
        Bean<?> bean …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection cdi weld

5
推荐指数
1
解决办法
986
查看次数

标签 统计

cdi ×1

dependency-injection ×1

java ×1

weld ×1