他の(@ NoneScoped)Beanへの参照を必要とするJSFバッキングBeanがあります。Inject対ManagedProperty
@Injectまたは@ManagedPropertyを使用して、コンテナからインスタンス参照を取得する必要がありますか?
なぜ私は1つではなく、他の人を使用して、私の心で2つのアプローチは同じことを達成します。
他の(@ NoneScoped)Beanへの参照を必要とするJSFバッキングBeanがあります。Inject対ManagedProperty
@Injectまたは@ManagedPropertyを使用して、コンテナからインスタンス参照を取得する必要がありますか?
なぜ私は1つではなく、他の人を使用して、私の心で2つのアプローチは同じことを達成します。
@ManagedProperty
および@NoneScoped
は、JSF 2.0仕様のものであり、@Inject
はCDI仕様のものです。
他のJavaEE 6機能を使用していないサーブレットアプリケーションで作業している場合は、@ManagedProperty
に移動してください。その注釈は@Inject
に対しても利点があります:EL(式言語)をそれに使用することができます(although there are workarounds to get that in CDI)。
アノテーション/コンテナは両方とも、「同じもの」を達成するようですが、非常に異なる方法で、それぞれ異なる容器で動作します。 CDIによって管理されるBeanは、JSFでは使用できますが、viceversaでは使用できません。 BeanにJSF固有の注釈を付ける場合は、カスタム修飾子、インターセプタ、プロデューサメソッドなどを忘れてしまいます。最終的には、より洗練されていますが、実際のニーズに応じて選択するのが普通です。あなただけ(何も指定しない場合、すべての豆が@Default
スコープ下にあるCDIで@NoneScoped
注釈を、理解することはできませんCDI)@ManagedProperty
に、その後スティックをJSFの機能を使用していることそれはそうと
することは、それをラッピング。あなたのプロジェクトでCDIに切り替えることは、@ManagedProperty
を@Inject
に置き換えるだけでなく、CDI固有のものをすべて@RequestScoped
(など)に置き換えることを意味するかもしれません。
可能であれば、マネージドBeanに比べてCDIを好むでしょう。 CDIはデプロイ時の依存性チェックが豊富で、プロキシサポートによりスコープリークが防止されます。これにより、モデルの正しさを簡単に検証できます。 Producersは、一般に、必要に応じてグルーコードを提供するために使用できます。
私は以下の何に似て、これを、追加し、あなたがCDIに注入できるEJBのようなものを持っています。あなたが@Nameを与えないと、それらをあなたの見解から守ることもできます(単にELで利用できるようになります)。 CDIを使用すると、JSFで使用できるものよりも拡張ポイントが大きくなりますが、これは質問の一部ではありません:) CDIを使用することをお勧めします。 – LightGuard