如何注入新的 SomeObject()
How to inject into new SomeObject()
我得到了一个 class 如下所示:
public class MyClass {
@Inject
private SomeClass someclass;
//...
}
如果我通过 new MyClass()
创建此 class,那么 someClass
就是 null
。如果我注入 MyClass
则不是。但我需要这里有新的建筑。我知道我可以通过构造函数将 someClass 传递给 MyClass,但我不想这样。我在这里还有什么其他的可能性?
我假设您使用的是 CDI 或类似的东西。为了在这种情况下注入工作,框架必须 "see" 需要注入一些东西(以及注入的地方)。这通常也是通过使用框架创建 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);
我找到了一个很好的解决方案。诀窍是通过以下方式注入“MyClass”:
@Inject
private Instance<MyClass> myClass;
然后你可以通过
构造bean
myClass.get();
这里封装了beanManager的用法
我得到了一个 class 如下所示:
public class MyClass {
@Inject
private SomeClass someclass;
//...
}
如果我通过 new MyClass()
创建此 class,那么 someClass
就是 null
。如果我注入 MyClass
则不是。但我需要这里有新的建筑。我知道我可以通过构造函数将 someClass 传递给 MyClass,但我不想这样。我在这里还有什么其他的可能性?
我假设您使用的是 CDI 或类似的东西。为了在这种情况下注入工作,框架必须 "see" 需要注入一些东西(以及注入的地方)。这通常也是通过使用框架创建 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);
我找到了一个很好的解决方案。诀窍是通过以下方式注入“MyClass”:
@Inject
private Instance<MyClass> myClass;
然后你可以通过
构造beanmyClass.get();
这里封装了beanManager的用法