代码之家  ›  专栏  ›  技术社区  ›  SteveB

焊接依赖注入问题

  •  0
  • SteveB  · 技术社区  · 6 年前

    我创建了一个POJO来保存RESTfulAPI客户机的上下文,类似于此(实际的类是专有的)。

    class MyPOJO {
    
        @Inject
        public AnInjectedInterface obj1;
    
        @Inject
        public AnotherInjectedInterface obj2;
    
        public String data1;
    
        public int data2;
    
        public long data3;
    
    }
    

    我非常想使用它:

    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号。

    谢谢您。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Siliarus    6 年前

    而不是使用 MyPOJO pojo = new MyPOJO(); @Inject MyPOJO pojo 以其中一个为准(

    obj1 obj2

    @Dependent 进入之内 @ApplicationScoped Instance<MyPOJO> get()

    InjectionTarget BeanManager )以下内容:

    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!
    
    推荐文章