2012-07-18 38 views
1

這在我看來,以下應該產生與兩個字段指向同一個實例,CDI - bean實例可重用性

class BeanToInject { 
    // something 
} 

class TargetBean { 

    @Inject 
    private BeanToInject first; 

    @Inject 
    private BeanToInject second; 

} 

但似乎是不正確的,因爲sysouting第一和第二,我得到

first: [email protected] 
second: [email protected] 

是不是讓豆子引用應該會在不同的上下文中重用? 我在這裏錯過了什麼?

回答

4

您沒有指定BeanToInject的範圍,而CDI的默認範圍是dependent pseudo-scope,其中每個注入點都接收到一個新的bean實例。

2

你必須註釋BeanToInject類如@Singleton兩個注射點使用相同的實例。

+0

我已經調查了這一點,並規範說(上)辛格爾頓具有與客戶端序列化的一些問題。他們建議使用(at)ApplicationScoped,而不是像單例那樣行事。 – grafthez 2012-07-18 20:46:25

+0

是的,那是在作用域像「應用」網絡環境一樣,「會話」,「會話」,「請求」,「查看」等存在。你的問題並沒有說明你是否在web env,ejb或者標準應用程序上工作,所以我只是想出了最簡單的答案。無論如何,這兩個答案都很好,你可以自由選擇你認爲更好地回答問題的答案。 :) – 2012-07-19 09:58:23