0

私の質問は少し複雑です:)私は私のセットアップを説明しよう...階層アプリケーション・コンテキストおよび標準スコープとカスタムスコープ

  • Iは、Webアプリケーションを持って、一つのウェブ-spring-いくつかのsingleton-、セッションスコープの豆コンテキスト、時々AOP-プロキシなど、通常のもの:)
  • アプリ内の私は私が個別に定義され、これを手動で行う、いくつかのサブコンテキストを「開始」することができるようにいくつかのインフラストラクチャを作成します春・コンフィギュレーション・クラス、これらのクラスは、スプリング・コンテキスト・豆・スキャンメイン/トップレベルから除外されている、私はアプリで、このようなサブコンテキストのの未定義の数を持っている...
  • アプリは、メインコンテキスト内のメインコンテキスト
  • でのみ実行できるように、サブコンテキストを持つ機能は、オプションであり、サブコンテキストの私はいくつかのクラス/インタフェースを使用している - から「トップレベル」を分離するために、私は右のBeanが正しい場所で使用されていると思うので、私はこの注釈で...二つの追加修飾子注釈を作成し、「サブコンポーネント・レベル」豆は、私はオートワイヤリングのものを魅惑:)
  • FooBarServiceがトップレベルにあります想像し、 N FooBarServiceの各サブコンテキストでは、各サービスは、彼の「自分」の状態を持っている必要がありますので、Nいくつかのサブコンテキスト豆が
  • などトップレベルの豆を(注入)を使用しているアプリケーション全体
  • で実行されている+ 1つのインスタンス

    これは、これまで

  • を動作しているようですが、今、私は私自身の「セッションスコープ」を作成した...私は、問題を見つけたと思う:(サブコンポーネントの

  • をBIGメモリリークを調査しました実装(ハッシュマップ、ない本当のクリーンアップなどurgs)と私は、これは私の(手動で開始)サブコンテキストのそれぞれについて、「SESSION」として「CustomScopeConfigurer」を介してスコープ登録...これで私はまだ "を使用することができますサブコンテキストのSpring-Configurationクラスで@ normal(@ value = WebApplicationContext.SCOPE_SESSION)アプローチを使用します。

Q1:この「手作り」の範囲は良いアイデアですか? :D Q2:この「手作り」の範囲は、この範囲は、「セッション」でN回存在する「セッション・スコープ」内の「変換スコープ」のようなものであることが、心に留めておく必要がありますので、「会話-1それを呼び出すことができます-scope」、「conversation-2-scope」...「conversation-N-scope」 Q3:このような「会話範囲」をいつどのようにクリーンアップできますか?

  • 私は階層的なスプリングコンテキストから、 "サブコンテキスト"には見つからないBeanが親コンテキストから要求(試行)されることを期待していました。

Q4:ここ

final ConfigurableListableBeanFactory parentBeanFactory = ((AbstractApplicationContext) parentSpringContext).getBeanFactory(); 
    final ConfigurableListableBeanFactory beanFactory = springApplicationContext.getBeanFactory(); 
    final String[] scopeNames = parentBeanFactory.getRegisteredScopeNames(); 
    for (final String scopeName : scopeNames) { 
    final Scope scope = parentBeanFactory.getRegisteredScope(scopeName); 
    beanFactory.registerScope(scopeName, scope); 
    } 

は私の「構造」を視覚化したものです:それは、このような「サブコンテキスト」で「親コンテキスト」からのすべての既知のスコープを登録する必要があります:

 
TOP-LEVEL-Context 
|-* session-scoped beans 
|-* singleton beans (HelloWorldService) 
| 
|->SUB1-Context 
| |-* session-scoped beans (FooBarService - depends on HelloWorldService) 
| |-* singleton beans 
| 
|->SUB2-Context 
| |-* session-scoped beans (FooBarService - depends on HelloWorldService) 
| |-* singleton beans 
| 
|->... 

任意のヒントは素晴らしいだろう:)

種類は アンドレアス

について

答えて

0

万が一... WeakHashMapをお探しですか?

私はすべてのSpring Crapについて考えていません:) - Dagger2を使用しているときに、サブグラフを作成して後で自動的にリリースする必要がある場合は、前述のことが便利です。

+0

Hahha ...こんにちはトーマス...まだ別のDIフレームワークではありません;)ライプツィヒから親切にしてください:) –

関連する問題