私はJersey 2.25(HK2 2.5-b30)というプロジェクトを持っています。もともと、私はHK2-Guice Bridgeを使っていました。しかし、いくつかのケースでは予期せず失敗するようです(特に、Guiceで設定されたカスタム注釈で注釈が付けられ、Guiceがインジェクションを行っているときにはうまく動作しますが、HK2がインジェクションしているときには静かに失敗します)。同じオブジェクトが注入方法によって異なる動作をする可能性があるため、私は両方を同時に使用することに恐怖を感じています。明示的に設定されていないクラスを注入するためにGuiceのようなHK2を動作させるにはどうすればよいですか?
私は今、HK2を使用するためにすべてを切り替えていますが、残念ながら、Guiceが成功する特定のケースではHK2が失敗するようです。特に、HK2は、タイプが明示的に構成されていない場合の注入を好まないようです。 Guiceはこれらのクラスの新しいインスタンスを作成し、再帰的に注入するだけで満足しましたが、HK2はあまりありません。例えば、
1. org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=TimeRangeRequestValidator,parent=GetWatchlistEventsImpl,qualifiers={},position=-1,optional=false,self=false,unqualified=null,1218743359)
あなたが見ることができるように、エラーメッセージは全く非常に有用ではありません。 Guiceが問題なく作成できた他のオブジェクトを参照するTimeRangeRequestValidator
を作成できるはずです。 HK2とGuiceとの間に違う行動のリストがあるので、これがなぜ機能していないのかを追跡できますか?
TimeRangeRequestValidator
は、デフォルトのパブリックコンストラクタとInject
と注釈されたフィールドを持つ@Singleton
と注釈されたクラスです(インターフェイスではありません)。 Guiceはそれをインスタンス化することに問題はなかった。
Yup;これは私が必要とするもののように見えます。私は実際に私が注射したいものを注入していることを確認するためにいくつかのチェックを追加します。私はこれがGuiceブリッジが使っているものとまったく同じだと考えていますが、少なくともそれを明示的に行うと、より多くの可視性と制御が得られます。 –