答えて
号
サーブレットインスタンスは、反射を介しコンテナによって作成され、それらは公共、引数なしのコンストラクタ(デフォルトコンストラクタ)を見つけることを期待します。
サーブレットを設定するには、web.xmlファイルで指定されたサーブレットパラメータを使用します。これらはサーブレットのinit()
メソッドに渡されます。
それがデフォルト以外のコンストラクタを選択し、単純型に文字列を強要し、反射的コンストラクタを呼び出すためのサーブレットコンテナの可能であろうが、これは、サーブレット仕様が必要とするものではありません。
一部の理由は歴史的かもしれません。依存関係注入システムがこの選択肢を広く実践する前にサーブレットが最初に指定されました。しかし、そのようなコンストラクタはかなり制限されています。 web.xmlで指定された単純な文字列から作成できる引数を渡すのが現実的ですが、より有用なオブジェクト— DataSource
、たとえば—は扱いにくいでしょう。
最終的なメンバー変数をサーブレットに含めるといいでしょう。
以前は「WebBeans」(JSR 299、私は思う)として知られていたJSRは、Servletsにおける依存性注入サポートのためのいくつかの標準を提供します。これは、現在のアプローチにおけるいくつかの欠点に対処するかもしれない。
サーブレットはコンテナによってインスタンス化されるため、引数のないコンストラクタが必要です。
さらに、コンテナはサーブレットを再利用し、再利用時にコンストラクタを呼び出すことはありません。
変数を<servlet-param>
で初期化するか、Springのようなフレームワークを使用して、ほかのBeanと同じように動作する別のクラスにサーブレットをプロキシできるようにする必要があります。
いいえ!サーブレットにパラメータ化されたコンストラクタを提供することはできません。サーブレットコンテナは、に基づいてオブジェクトを作成します。サーブレットコンテナは、 オブジェクトを作成します。 Class.forName()
を使用してクラスにオブジェクトを作成することができます。クラスにデフォルトのコンストラクタのみが含まれている場合、コンテナがオブジェクトを作成するときにClass.forName()
コードを使用するため、サーブレットとしてパラメータ化されたコンストラクタを書き出しません。パラメータ化されたコンストラクタを記述したい場合でも、コンストラクタをservice()
メソッドから呼び出す必要があります。
- 1. パラメータ化されたコンストラクタJava
- 2. Structuredのパラメータ化されたコンストラクタ
- 3. Javaのパラメータ化されたコンストラクタ
- 4. Javaでパラメータ化されたコンストラクタ
- 5. MapStructとパラメータ化されたコンストラクタ?
- 6. C#のパラメータ化されたコンストラクタからパラメータのないコンストラクタを呼び出す?
- 7. パラメータ化されたコンストラクタを使用したリフレクト経由のディープコピー
- 8. 基本的なjavaのパラメータ化されたコンストラクタの利点
- 9. パラメータ化されたクラスのコンストラクタを書く方法
- 10. Javaのサブクラスでパラメータ化されたコンストラクタをオーバーライド
- 11. パラメータ化された抽象クラス型のC#コンストラクタ
- 12. MEFパラメータ化されたコンストラクタを持つファクトリパターン
- 13. ビューモデルでパラメータ化されたコンストラクタが動作しない
- 14. パラメータ化されたコンストラクタ値を設定する方法
- 15. パラメータ化されたコンストラクタでenumを使用するには?
- 16. メソッド参照としてパラメータ化されたコンストラクタを渡す
- 17. パラメータ化されたコンストラクタを作成する
- 18. Guice:パラメータ化されたコンストラクタを挿入する
- 19. パラメータ化されたコンストラクタを複数持つ抽象クラス
- 20. パラメータ化されたコンストラクタにchar配列を渡す
- 21. XSDからのタイプ/クラス用のパラメータ化されたコンストラクタの生成
- 22. Javaリフレクションでこのコンストラクタのパラメータ化された型は何ですか?
- 23. パラメータ化されたクラスのインスタンス化
- 24. パラメータ化されたスーパークラスに基づくジェネレータの作成にコンストラクタを使用
- 25. パラメータ化されたクエリエラーC#
- 26. マクロ化されたパラメータ
- 27. パラメータ化されたコンストラクタエラー
- 28. パラメータ化されたファンクタ
- 29. パラメータ化されたアクション
- 30. パラメータ化されたテストスイート
しかし、なぜそれがデフォルトのコンストラクタを期待していますか?リフレクションも使用して、パラメータ化されたコンストラクタを呼び出すことができます。 –
それでは、コンストラクタでどのような値を渡すべきでしょうか。 – artemb
Servlet 3.0が提供しているものを見たことがありますか? –