1

「webapplication」コンテキストと「core」コンテキストの2つの春のコンテキストがあります。コンテキスト「コア」はサーバーの起動時に初期化され、コンテキストを保持するシングルトンクラスにアタッチされます。「webapplication」コンテキストは、webapplicationの開始時に初期化されます。

あるコンテキストのBeanから別のコンテキストへのBean依存関係を注入したい(双方向アクセス)。WebアプリケーションBeanは、「セッション」スコープのBeanになります。

私はこの概念実証を次のようにテストしています:webapp bean->(依存する)core bean->(別のbeanに依存する)webappbean。

Webアプリケーションコンテキストの初期化で、「コア」Beanを「Webアプリケーション」Bean(シングルトンにアクセスして魔法をかけるBeanFactory)に注入することはできますが、その逆を行う方法を理解することはできません。WebApplicationContextを保持するSpringThreadLocalがまだ初期化されていないためです。

質問は。それは私が可能にしようとしていることですか?答えが「はい」の場合、どのようにそれを行いますか?

前もって感謝します。

編集:

私は何か間違ったことをしていることに気づきました。事実、私はサービスレイヤーにセッションBeanへの依存関係を間違ったタイミングで注入しようとしています。つまり、現在のユーザーセッションがないWeb初期化時です。

4

1 に答える 1

1

これは私にはアーキテクチャ上の問題のように見えますが、技術的な問題ではありません(そして確かにSpringではありません)。コアコンテキストとWebコンテキストの分離は非常に優れています。前者はビジネスプロセスを処理し、後者は表現、おそらくいくつかのAPIを担当します。

Web(表現、アクセス)からコアへの依存関係は理解可能であり、必要です。結局のところ、ビジネスルーチンを介してインターフェイスを構築しているのです。これは、がデフォルトでどのように機能するかであり、コアコンテキストの個別の子(Web)アプリケーションコンテキストを作成します。

逆依存性のユースケースはほとんど想像できません。なぜあなたのビジネスロジックはウェブレイヤーに依存しているのですか?アプリケーションを別の表現手法(デスクトップ、モバイル)に移行しようとするとどうなりますか?この逆転した依存関係の理由を正当化できますか?セッションBeanとはどういう意味ですか?

双方向の依存関係、およびアプリケーションコンテキストへのクラスローダー全体の参照を保持する静的シングルトンは、設計に問題があることを示しているはずです。

于 2012-07-25T17:27:45.107 に答える