首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >焊接依赖注入问题

焊接依赖注入问题
EN

Stack Overflow用户
提问于 2018-06-22 00:48:52
回答 1查看 615关注 0票数 0

我创建了一个POJO,用于保存RESTful API客户端的上下文,类似于此(实际类是专用的)。

代码语言:javascript
复制
class MyPOJO {

    @Inject
    public AnInjectedInterface obj1;

    @Inject
    public AnotherInjectedInterface obj2;

    public String data1;

    public int data2;

    public long data3;

}

我想用它:

代码语言:javascript
复制
MyPOJO pojo = new MyPOJO();
pojo.data1 = "something";
pojo.data2 = 43;
pojo.data3 = 2875640;
pojo.obj1.someFunction();
pojo.obj2.anotherFunction("something");

如果我这样做,obj1和obj2总是空的。这些接口在非POJO类的其他地方使用,并被正确注入。它们是依赖对象,上面的代码出现在应用程序作用域bean中,所以我不能在那里注入POJO。

我的问题是: DI在未被容器实例化的对象中不可用吗?如果是这样的话,有没有办法告诉容器在一个应用程序作用域bean中实例化我的依赖项POJO?如果没有,我做错了什么?我的集装箱是野生苍蝇11号。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-25 11:22:56

你做错了。而不是使用MyPOJO pojo = new MyPOJO();,而是将@Inject MyPOJO pojo放入您想要使用它的哪个(bean)类中。

CDI/Weld为您创建,在创建过程中,它将解决所有内部依赖关系(在您的情况下是obj1obj2 )。

我看你编辑了这个问题,下面是一些其他的答案。

首先,您可以将@Dependent注入@ApplicationScoped,如果需要多个实例,可以利用Instance<MyPOJO>,并在每个get()上获得新实例。但请注意,您将需要确保您也处置这些对象!

DI在未被容器实例化的对象中不可用吗?

默认情况下,CDI不会以任何方式处理它。但是,您可以自己执行对这样的对象的注入。准确地说,您要注入的对象将作为InjectionTarget处理,您将需要BeanManager来完成这一操作。以下是大致的方式(不是复制粘贴代码):

代码语言:javascript
复制
BeanManager beanManager; // assuming you have obtained BM somehow
CreationalContext<Object> ctx = beanManager.createCreationalContext(null);
InjectionTarget<MyPOJO> injectionTarget = beanManager
                    .getInjectionTargetFactory(beanManager.createAnnotatedType(MyPOJO.class)).createInjectionTarget(null);
injectionTarget.inject(myPojoInstance, ctx);
creationalContext = ctx; // store ctx so you can later on use it to dispose of the dependent instance!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50979221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档