2012-04-08 3 views
3

私は同じ話題について別の質問をするのをためらっていますが、少なくとも今は私が読んでいると思います、右はdocsです。@ProducesはFacesContextを返します---なぜですか?

ので、このクラス:weld docsから

class FacesContextProducer { 
    @Produces @RequestScoped FacesContext getFacesContext() { 
     return FacesContext.getCurrentInstance(); 
    } 
} 

この方法は、実際には、通じGlassFishのために適用されます:GlassFish is using WELD as the reference implementation for JSR-299: Java Contexts and Dependency Injection for the Java EE platform (CDI).

それが使用される上記のクラスについては、? @なぜFacesContextを生成する別のクラスが必要ですか?

+0

私は本当に疑問を理解していません...あなたがweldのドキュメントで見るものはちょっとした提案ですが、IMHO、私は 'FacesContext'を注入しようとはしませんでした。有効なインスタンスを取得するのはかなり簡単です'FacesContext.getCurrentInstance()'を使って...私は本当に誰かがなぜそれを持っているのか理由が分からない。 –

+0

[glxn](http://www.glxn.net/?p=141)はそのように思えますが、なぜ私は理解できません。質問を修正するために、なぜFacesContextを挿入しようとしていますか?私はこの質問を削除する必要があると思う、私は別の私の質問に別れることを意味した。 – Thufir

+0

私は彼が 'InjectionPoint'sを使って独自のプロデューサメソッドを実装できる_a way_を実証するWeldのドキュメントの例にちょうど従っていると思いますが...私は例としてこれを見ています...ただ一つではありません物事を行う方法とCDIは、柔軟性の多くを提供します –

答えて

7

上記のクラスでは、どこで使用されますか?なぜ彼はFacesContextを注入しようとしていますか?

は、私はそれがどちらか

  1. 一貫性を保つために行われていると思います。または
  2. 試験。

ad 1.純粋なCDIを実行しようとすると、他の依存関係ルックアップメカニズム(getCurrentInstace()静的メソッド)を使用していないときにうまく見えます。プロデューサと使用インジェクションを定義するには、実際にはにはが必要ではないことに注意してください。それはCDIの使い方と一貫して便利です。

ad 2.ブログで説明されているMcDowellがリンクしています。注射はCDIで行われると想像してください。

なぜ@ FacesContextを作成する別のクラスが必要ですか?

これは別のクラスである必要はなく、複数の豆を生成する単一のクラスを持つことができます。コードを分かりやすくするだけです。

+1

+1テスト用に、FacesContextを注入するとはるかに簡単に嘲笑することができます! – mglauche

+0

'@ Produces'(高度なCDI機能)を使わなくても普通のCDI使用法と同じだと思います。 "consistent"は '@Inject FacesContext ctx'フィールドを持つことですが、これはサポートされていません。 'FacesContext.getCurrentInstance()'メソッドを試してみると、実際には簡単に行うことができます(実際のJava EE 7アプリケーションではいつでも必要です)。 –

+0

@Rogérioこれは私のプロジェクトや私が遭遇したプロジェクトで常に使用されています。それは本当にCDIの主な機能の1つです。あなたが本当に依存性注入を使用しようとしているなら、何を注入するかを定義できることは必須です。 – ymajoros

6

固定getCurrentInstance()メソッドに直接依存しないように、模擬テストとユニットテストを簡単にするために、FacesContextを注入するとよいでしょう。

私は、JSF独自の依存性注入機構hereについて少し書いています。

+0

ありがとうございますが、@ ManagedBeanを使用していて、@ Namedを使用していないことに気付きましたか?それはCDIですか? – Thufir

+0

@Thufir - 上記のように、ブログ・ポストではJSF依存性インジェクション - [javax.faces.bean](http://docs.oracle.com/javaee/6/api/javax/faces/bean/package-summary)が使用されています。 html) - JSR 299/CDIではありません。しかし、元本は同じです。 – McDowell

関連する問題