如何注入新的SomeObject()

时间:2015-10-23 10:36:48

标签: java dependency-injection cdi

我得到了如下课程:

public class MyClass {

    @Inject
    private SomeClass someclass;

    //...
}

如果我按new MyClass()创建此课程,则someClassnull。如果我注射MyClass则不是。但我需要在这里建造新的。我知道我可以通过构造函数将someClass传递给MyClass,但我不想要这个。我还有什么其他的可能性?

2 个答案:

答案 0 :(得分:1)

我假设你正在使用CDI或类似的东西。为了在这种情况下注射工作,框架必须"见"需要注射一些东西(以及注射它的地方)。这通常通过使用框架创建MyClass实例来完成,但也可能有一种方法可以手动触发注入。

就CDI而言,它将是这样的:

BeanManager bm = ...; //lookup or let it inject        
Bean<MyClass> bean = (Bean<MyClass>)bm.getBeans( MyClass.class ).iterator().next();    
CreationalContext<T> ctx= bm.createCreationalContext( bean );    
MyClass instance = bm.getReference( bean, MyClass.class, ctx);    

答案 1 :(得分:0)

我找到了一个非常好的解决方案。诀窍是以下列方式注入'MyClass':

@Inject
private Instance<MyClass> myClass;

然后你可以通过

构建bean
myClass.get();

这封装了beanManager的用法。