3

私は、アプリケーションの起動方法に関するリファクタリング作業を任されています。基本的に、GUI アプリケーションのスタートアップ コードに依存する多数のコンソール アプリがあり、出荷する必要があるライブラリや、他のモジュールが宣言する必要のある依存関係に影響を与える偽の依存関係を引き起こします。

そこで、単純なスタートアップ フレームワークを作成しました。基本的には、一連の Runnable オブジェクトをリストに入れ、それらを順番に実行するだけで、動作します。

しかし、私は考えていました-私たちはすでにプロジェクトにPicoContainerを持っているので、起動時に実行する必要があるこれらすべてのものはPicoContainerにスローされる可能性があり、Startableを実装すると起動します...

しかし、それらの間の順序を指定したい場合もあります。たとえば、アプリケーションが起動中であることを示すヘッダーをログに書き込む前に、他のコンポーネントがログに書き込むことは望ましくありません。インジェクションの依存関係を導入することで順序付けを導入できることはわかっていますが、この場合、これはハックのように感じます。全て。

とはいえ、PicoContainerの起動順序を制御できれば良さそうなので、何か方法はないでしょうか?

または、単純にして、Runnable のリストに固執することもできます。結局のところ、それは機能します。

4

2 に答える 2

2

デフォルトの開始/停止順序を制御することはできませんが、独自のライフサイクルを順序付けることはできます。

例:

1)メソッドinit()を持ち、Comparableを拡張するMyStartableインターフェイスを作成します。

2)MyStartableのリストまたは配列で初期化されたコンテナコンポーネントMyStartを追加します。

3)MyStartを手動で、または標準の開始/停止ライフサイクルで開始します

4)MyStartでは、オーバーライドする必要のある自然な順序に従ってリスト/配列を並べ替えるだけです。

5)すべてのMyStartableでinit()を呼び出します

ライフサイクルマネージャーを介してこれを行うためのより「ネイティブな」方法があると思いますが、ソースを調査する必要があります。

于 2012-05-05T12:07:46.280 に答える
0

コンポーネントは現在どのようにログに書き込みますか?ログへの(picocontainer)依存関係があると予想し、そのログのコンストラクターがヘッダーを書き込みます。ロギングが注入されず、PicoContainerを完全にバイパスする場合、ヘッダー部分だけを取り込むのではなく、残りのロギングと同様に、それを分離しておくことになります。

于 2010-11-03T22:12:14.977 に答える