まず第一に、これは疑念のある質問ではなく、ほとんどの関連する質問をSOで読みました。私は以下のソリューションが正しいアプローチ/方法であるかどうかをアドバイスしたいと思っています。CDIとジャージーとの抽象的な拘束の有無を問わずに
私はjersey-based
WebアプリケーションでDIを実装する方法の多くのチュートリアルを読んでいると、それらのほとんどは、その必須のCDIを有効にするためにWEB-INF/*
でbeans.xml
を作成することをお勧めしますが、ジャージーのAbstractBinder
を使用して、同じ結果を得る場合、私は疑問に思います?
私は従う
public class AppConfig extends ResourceConfig {
public AppConfig() {
AbstractBinder binder = new AbstractBinder() {
@Override
protected void configure() {
bind(Impl.class).to(Interface.class).in(Singleton.class);
}
};
register(binder);
register(MultiPartFeature.class);
packages("..."); //packages
}
}
としてweb.xml
<servlet>
<servlet-name>Test Jersey</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.config.AppConfig</param-value>
</init-param>
そしてcom.test.config.AppConfig
で、次のいジャージーWebアプリケーションを持っているし、私は、インタフェースに注釈を付けると実装が
@Inject
private SomeInterface someInterface;
を注入します
上記はうまく動作します。私が注入したいものが何であれ、binder
にそれを含めてから、injection point
と指定して注射します。
そこにはbeans.xml
WEB-INF/
内のディレクトリはありませんし、beans.xml
を宣言する必要がなくなりResourceConfig
拡張AppConfig
内部AbstractBinder
を使用しているのだろうか?
を追加すると、@Component
または@ManagedBean
のクラスに注釈を付けるときに、DIの道を開くクラスがスキャンされる可能性があります。なぜなら....
かかわらず、私は、ジャージーでのDIのための既存のソリューション(上図)と
- するかどうかのスティック上のご意見/助言/アドバイス/提案を聞いて幸せだろうか?
- アノテーションクラス(注入する必要がある)に切り替えて、
beans.xml
のアノテーション検出を使用しています...なぜですか? - ジャージーはデフォルトで
HK2
を使用します。別のDI コンテナを使用する価値がありますか、またはHK2で十分ですか? - JavaEE 6 DIIと比較して、JerseyのSpring DIについてのあなたの見解は?
TomcatではCDIがサポートされていないことを示すチュートリアルはたくさんありますか?上記ではAbstractBinder
を使用していましたが、私はプログラムでバインドしていると思いますか?コメント。