Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @Inject可以在pojo中使用吗_Java_Cdi_Java Ee 6 - Fatal编程技术网

Java @Inject可以在pojo中使用吗

Java @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

我试图使用和理解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 greeting;

   public void testGreet() {
    greeting.testGreet();
   }
}
当我调用testGreet()时,它抛出NPE,为什么greeting实例为null。@Inject添加依赖项的方式是否只在容器管理的bean中使用?
注意:jar不是这里的问题

您需要一个JavaEE容器,然后需要将问候语和测试定义为托管bean。然后你可以把一个注射到另一个

试着看看: TL;博士: @注入注释字段仅为容器实例化的bean填充

长版本: CDI容器为您提供了许多实用程序,可以轻松地将依赖项注入到您的bean中,但它并不能神奇地工作。如果容器实例化了客户机bean本身,那么容器只能填充客户机bean的注释字段。当容器实例化对象时,事件顺序如下:

  • 您的bean的构造函数被调用
  • @注入带注释的字段(以及其他 注释(例如@PersistenceContext和@EJB)是 人口稠密
  • @构造后注释未调用args方法
  • 你的豆子吃完了
  • 您面临着一个典型的引导问题,即如何从非容器管理的代码转移到容器管理的代码。你的选择是:

  • 通过JNDI查找从JavaEE容器访问BeanManager实例。这是技术性的,而且有点笨拙
  • 使用CDI扩展库,如ApacheDeltaspike。(示例:
    BeanProvider.getContextualReference(Test.class,false);
  • 修改应用程序,使其在可以注入测试类而不是调用
    newtest()的情况下启动。这可以通过设置一个启动单例ejb来实现,该ejb在@PostConstruct注释的初始化中调用您的测试

  • 希望这能有所帮助。

    您的类应该是从Serializable实现的,以便作为“CDIBean”注入的。

    您可以注入POJO,但要注入的类必须是容器管理的(在实例化时让容器知道他必须填充
    @inject
    -注释字段)。在其他地方,您必须具有带有@Produres annotation的方法return Greeting。在任何情况下,使用DeltaSpike都是一个好主意!