我有一个由第三方代码实例化的类(它使用反射来创建对象。)我提供他们的接口的实现,他们创建对象。在我的实现中,我想使用 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)