2016-02-26 31 views
0

我希望在注射期間給CDI中的pojo豆提供行進範圍。注射期間CDI豆的範圍界限不起作用

我在Managed Bean的這樣的@javax.faces.bean.ViewScoped創建一個普通的bean並注入一樣@javax.enterprise.context.ApplicationScoped

@Inject 
@ApplicationScoped 
Pojo pojo; 

// POJO類

Class Pojo { 
    private String var; 

    public Pojo() { 

    } 

    public String getVar() { 
    return var; 
    } 

    public void setVar(String var) { 
    this.var = var; 
    } 
} 

POJO的bean的填充值無法還原在使用相同語法注入的新視圖bean中。

但它的工作原理,當我在類聲明中使用@ApplicationScoped代替,其次是非範圍的注射,像這樣:

@ApplicationScoped 
Class Pojo { 
     private String var; 

注:

@Inject 
Pojo pojo; 

前一種情況得到解決,當我製作一個製作人和限定詞,但我覺得這將是一個我應該沒有的開銷。作爲CDI的新手,我想問一下我在這裏真正想念的是什麼。

回答

1

範圍和上下文管理是CDI中非常強大的功能。它也是組件業務邏輯的一部分(一個@ApplicationScoped的bean不會像@RequestScoped那樣被開發出來),這就是爲什麼範圍是鏈接到bean定義的原因。 注入點只是一個你消耗一個bean的地方,而不是你定義它的地方,所以沒有辦法在規範級別的注入點定義一個bean的範圍。 現在如果你真的想使用這個功能,你可以開發一個可移植的擴展來增加這種可能性。但是您可能還必須在限定符系統上工作,因爲範圍不在bean解析過程中使用(即,如果不存在特定的注入點,那麼在不同範圍中具有相同類型的兩個bean將對給定注入點發生衝突預選賽)。

+0

可以理解。我一直在想,爲什麼在CDI中不能有一箇中性的注射豆,注射時可以有任何的範圍。我認爲要達到這個不同的範圍,我還需要修改我當前的擴展名(限定符和生產者),或者一個新的擴展名,用於不同的範圍。 – user2918640