Java 如何注入到新的SomeObject()中

Java 如何注入到新的SomeObject()中,java,dependency-injection,cdi,Java,Dependency Injection,Cdi,我得到了如下的课程: public class MyClass { @Inject private SomeClass someclass; //... } 如果我通过newmyclass()创建这个类,那么someClass就是null。如果我注入MyClass它就不是。但我需要新的建筑。我知道我可以通过构造函数将某个类传递给我的类,但我不想这样。这里还有什么其他的可能性吗?我假设您正在使用CDI或类似的东西。在这种情况下,为了让注入工作,框架必须“看到”注入某些

我得到了如下的课程:

public class MyClass {

    @Inject
    private SomeClass someclass;

    //...
}

如果我通过
newmyclass()
创建这个类,那么
someClass
就是
null
。如果我注入
MyClass
它就不是。但我需要新的建筑。我知道我可以通过构造函数将某个类传递给我的类,但我不想这样。这里还有什么其他的可能性吗?

我假设您正在使用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);    
BeanManager bm=//查找或让它注入
Bean=(Bean)bm.getBeans(MyClass.class).iterator().next();
CreationalContext ctx=bm.createCreationalContext(bean);
MyClass实例=bm.getReference(bean、MyClass.class、ctx);

我找到了一个很好的解决方案。诀窍是通过以下方式注入“MyClass”:

@Inject
private Instance<MyClass> myClass;

这封装了beanManager的用法。

在我看来没有太多“干净的代码”。难道没有更好的解决方案吗?类似于最佳实践的东西?@Chris311您也可以让CDI将
MyClass
的实例注入到您需要的地方。如果没有注入(因为目标本身不是由CDI管理的),则必须使用与上述类似的代码(可能包装在方法中)。事实上,您需要在非托管对象和托管对象之间进行一些集成,因此您需要一些看起来像“样板”的代码。@DownVorters:为什么要DownVote?请告诉我该怎么做才能得到你的批准。那么我来解决这个问题。
myClass.get();