私のWicketApplicationでバックエンドと通信するインポートされたClient.classを初期化するのが好きです。私は私のWebApplication.class(これはinitメソッドの中で正しい?)でこれを行う必要があることを知っています。しかし、私はどのように私のPage.classesでこのインスタンスを取得できますか?どのように私はそれと通信することができますか?アドバイスWicket - 外部クラスを初期化する
答えて
ため
ありがとうございますgetApplication()
またはWebApplication.get()
を使用して、現在のアプリケーションを取得することができます。そこから、あなた自身の実装にその型を絞り込み、Client.class
属性のgetterを呼び出すことができるはずです。アプリケーションはすべてのユーザー間で共有されるオブジェクトであり、クライアントの属性はスレッドの安全性を確保する必要があります。
Google GuiceのようなDependency Injection Frameworkを使用して、インスタンスをコンポーネントに注入します。それ以外のCedric Gatayの答えは、ソリューションをかなりうまくカバーしています。
DIを使用すると、単体テストのための別の実装を心配する必要がなくなるため、テストモジュールで簡単に定義できるので、追加のボーナスを提供します。
あなたのページのコンストラクタで外部クラスを手動で '注入'することで、中盤に留まることができます。それは、後の時点でそれを切り替える方法を妨げることなく、この時点で新しい技術を組み込むという面倒を惜しまないでしょう。そうすれば、あなたのページはWebApplicationの特定の(あなたの)実装に縛られることはなく、テストで外部クラスの別の(模擬された)インスタンスを提供することで簡単にテストできます。
今日私はこのDIについて読んでいます。私は戸口を初めて使っています。私はまず注射なしでそれを試すことを考えました。しかし、それはそれなしで動作することはお勧めしません、それはありません? – user1090145
@ user1090145私はWicketとGoogle Guiceの両方の巨大なファンだから、この質問をするのは間違った人です。デカップリングは認識を超えて容易になりますが、他の人は予期しない場所(モジュールのような)に重要な情報を隠していると主張しています。私の答えには別のアプローチが含まれています。 – Nicktar
- 1. Java外部クラス静的初期化
- 2. 外部クラスを制御/初期化する[AS3]
- 3. 初期化静的内部クラス
- 4. 内部構造体を外部構造体初期化で定数として初期化する
- 5. クラス初期化リスト
- 6. 外部Javascriptファイルからopenlayersマップを初期化する
- 7. onCreateメソッドの外部でCastContextを初期化する方法
- 8. 外部データでアプリケーションを初期化する
- 9. パブリッククラスメンバ配列をクラス外から初期化する
- 10. dateTextField(Apache Wicket)の初期値
- 11. コンストラクタの内部または外部のメンバ初期化
- 12. WebBindingInitializerへの@InitBinderの初期化の外部化
- 13. C++クラスをグローバルに初期化する
- 14. llvm 4.0.0 AliasSetTrackerクラスを初期化する
- 15. クラスでプロトコルを初期化する
- 16. ポインタの初期化クラス
- 17. C++ 11クラス初期化エラー
- 18. クラスのメンバーの初期化
- 19. 巡回クラスの初期化
- 20. Pythonクラスの初期化
- 21. Rubyクラスの初期化
- 22. Pythonクラスの初期化
- 23. クラスのストリームの初期化
- 24. クラス変数の初期化?
- 25. 拡張クラスの初期化
- 26. 外部クラスのメソッドで内部クラスが宣言されている場合、内部クラスのインスタンスを初期化する方法はありますか?
- 27. タイプの初期化例外
- 28. ブレース初期化対象外
- 29. AVCaptureDeviceInput初期化例外
- 30. 親クラスの初期化から条件のサブクラスを初期化する
キャストを行うアプリケーションクラスに静的メソッドを作成することもできます。つまり、 'MyApplication.get()'は 'MyApplication'タイプを返します。 – biziclop