2016-09-19 22 views
2

假設我有Class A,B,C,其中Class B包含setter和getters。 我想在Class A中使用Class B(通過設置true對Class B執行Setter操作)以及在Class C中執行(在Class B上執行getter操作)。 但是,我面臨的問題是,如果執行獲取相同的B類對象true應該打印在類C中,而不是打印出來。 該片段是如下在類中使用@Inject annoation的錯誤

Class A { 
    @Inject 
    B b; 
    //Setting true 
    b.set(true); 
} 

Class B { 
    boolean b; 
    //Setter 
    //Getter 
} 

Class C { 
    @Inject 
    B b; 
    // 
    boolean ball=b.get(); 
    Log.info(ball) //False is getting printed instead of true why is this!! 
} 
+1

如何創建注入的'b'?通過一些代碼或配置文件?你如何將'b'設置爲true?請閱讀[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

+0

這是一個CDI bean,我們不使用配置文件,而是依賴注入.Iam使用setter方法將b設置爲true –

回答

2

的問題是,你是不是給你豆範圍 - 因此默認情況下它們都將@Dependent。在某些情況下這沒什麼問題,但在另一個這樣的bean中注入一個@Dependent bean將創建一個新實例

換句話說,您注入Class Aclass B與您注入的class C不相等。

現在,該如何解決?

例如,您可以使class B@ApplicationScoped bean。應用程序範圍從CDi容器引導(=從開始)持續到結束。這樣在整個應用程序中將會有一個實例,並且因此該bean的狀態將在您注入其中的所有位置之間共享。

@ApplicationScoped 
Class B { 
    boolean b; 
    //Setter 
    //Getter 
} 

只是旁註:另一個答案在這裏建議使用@Singleton。我會建議不要這樣做,尤其是在EE環境下。

相關問題