簡體   English   中英

CDI:使用@PostConstruct時@Inject不會失敗

[英]CDI : @Inject not failing when using @PostConstruct

任何人都可以向我解釋為什么第一種情況和第二種情況失敗導致NullPointerException原因是,當第三種情況可以正常工作時,在Bean1的構造函數中b2和/或b3仍然為null。

在所有情況下都具有此功能:

@Stateless
public class Bean2 {

   @Inject
   private Bean3 b3; 

   public Bean2(){

   }

}

第一種情況:(失敗)

@Singleton
@StartUp
public class Bean1 {

   @Inject
   private Bean2 b2;

   public Bean1(){
     b2.someMethod(); // b2 throws null pointer exception
   }

}

第二種情況:(失敗)

@Singleton
@StartUp
public class Bean1 {

   private Bean2 b2;

   public Bean1(){
     b2 = new Bean2();
     b2.someMethod(); // b3 throws null pointer exception
   }

}

第三種情況:(成功)

@Singleton
@StartUp
public class Bean1 {

   @Inject
   private Bean2 b2;

   public Bean1(){

   }

   @PostConstruct
   public init(){
     b2.someMethod();
   }


}

僅在實例化bean之后才進行注入,而在實例化構造函數之后才進行注入,這就是為什么在第一種情況下具有NPE的原因。

在第二種情況下,您將實例化bean b2,這意味着它不會由Java EE服務器管理(這意味着沒有注入),因此請參考ref。 b3將為空。

在第三種情況下,當您的init方法被調用時,所有構造函數均已被調用,並且Bean已被注入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM