如何注入新的 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的用法