我得到了如下课程:
public class MyClass {
@Inject
private SomeClass someclass;
//...
}
如果我按new MyClass()
创建此课程,则someClass
为null
。如果我注射MyClass
则不是。但我需要在这里建造新的。我知道我可以通过构造函数将someClass传递给MyClass,但我不想要这个。我还有什么其他的可能性?
答案 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;
然后你可以通过
构建beanmyClass.get();
这封装了beanManager的用法。