[英]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.