0

Spring アプリのコンテキスト ファイルに UserCredetnialsDatSourceAdapter が定義されています。また、DelegatingFilterProxy を介してカスタム フィルターを Spring に追加しました。

このフィルターは、@Autowire を使用して DataSource Bean への参照を取得します。また、DAO で DataSource を @Autowire します。デバッグすると、Filter インスタンスと DAO インスタンスのデータソースに異なるインスタンス ID が表示されます。デフォルトでシングルトンのインスタンスが 2 つあるのはなぜですか?

また、jvisualvm を起動し、ヒープを調べたところ、アプリ コンテキスト内のすべての Bean に 2 つのインスタンスがありますか? 洞察をありがとう、Beanの前処理/後処理に何か関係があるか、フィルターで@Autowireを使用すべきではないかもしれません。どんな助けでも感謝します。ありがとう!

編集

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config-context.xml</param-value>
 </context-param>

 <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
 </servlet>

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.html</url-pattern>
 </servlet-mapping>

 <init-param>
<param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/web-context.xml,/WEB-INF/config-context.xml</param-value>
 </init-param>

興味深いことに、何が起こっているのかがわかります。2 つのコンテキストがあるため、2 つのインスタンスがあります。アプリ用に 1 つ、リクエストごとに 1 つ (スレッド) だと思いますか? 使用するコンテキストを指定する方法はありますか? おそらくフィルターは答えではなく、AOP を使用する必要があります。可能であれば、@Aspect に Bean を注入する方法を調査する必要があります。

ありがとう!!

-ジョー

4

1 に答える 1

2

/WEB-INF/config-context.xmlルート アプリケーション コンテキスト (によってロードされたものContextLoaderListener) と Web コンテキスト (によってロードされたもの) の一部としてインポートしていますDispatcherServlet。おそらく、 用のものから削除できますDispatcherServlet

于 2012-07-12T18:39:22.530 に答える