Java @Inject可以在pojo中使用吗
我试图使用和理解CDI,当我在一个简单的pojo类中使用@Inject时,它会让我产生NPE 范例 Greeting.javaJava @Inject可以在pojo中使用吗,java,cdi,java-ee-6,Java,Cdi,Java Ee 6,我试图使用和理解CDI,当我在一个简单的pojo类中使用@Inject时,它会让我产生NPE 范例 Greeting.java public Class Greeting { public String greet() { System.out.println("Hello"); } } Test.java import javax.inject.Inject; public class Test { @Inject private Greeting greetin
public Class Greeting {
public String greet() {
System.out.println("Hello");
}
}
Test.java
import javax.inject.Inject;
public class Test {
@Inject
private Greeting greeting;
public void testGreet() {
greeting.testGreet();
}
}
当我调用testGreet()时,它抛出NPE,为什么greeting实例为null。@Inject添加依赖项的方式是否只在容器管理的bean中使用?
注意:jar不是这里的问题 您需要一个JavaEE容器,然后需要将问候语和测试定义为托管bean。然后你可以把一个注射到另一个 试着看看: TL;博士: @注入注释字段仅为容器实例化的bean填充 长版本: CDI容器为您提供了许多实用程序,可以轻松地将依赖项注入到您的bean中,但它并不能神奇地工作。如果容器实例化了客户机bean本身,那么容器只能填充客户机bean的注释字段。当容器实例化对象时,事件顺序如下:
BeanProvider.getContextualReference(Test.class,false);
)newtest()的情况下启动代码>。这可以通过设置一个启动单例ejb来实现,该ejb在@PostConstruct注释的初始化中调用您的测试
希望这能有所帮助。您的类应该是从Serializable实现的,以便作为“CDIBean”注入的。您可以注入POJO,但要注入的类必须是容器管理的(在实例化时让容器知道他必须填充
@inject
-注释字段)。在其他地方,您必须具有带有@Produres annotation的方法return Greeting。在任何情况下,使用DeltaSpike都是一个好主意!