簡體   English   中英

Spring MVC:使用@Autowire獲取對不同spring bean實例的引用

[英]Spring MVC: Using @Autowire is getting references to different spring bean instances

我在Spring應用程序上下文文件中定義了UserCredetnialsDatSourceAdapter。 我還通過DelegatingFilterProxy將一個自定義過濾器添加到Spring中。

此過濾器使用@Autowire獲取對DataSource Bean的引用。 我還在我的DAO中@Autowire DataSource。 當我調試時,我看到Filter和DAO實例中的數據源有不同的實例id。 為什么默認情況下有兩個單身人士?

我也啟動了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個上下文。 一個用於應用程序,一個用於每個請求(線程)我假設? 有沒有辦法規定使用哪種上下文? 也許過濾器不是答案,我需要使用AOP。 需要研究如何在@Aspect中注入bean,如果可能的話。

謝謝!!

-Joe

您正在導入/WEB-INF/config-context.xml作為根應用程序上下文的一部分(由ContextLoaderListener加載)以及Web上下文(由DispatcherServlet加載)。 您可以從DispatcherServlet刪除它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM