[英]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.