我在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
答案 0 :(得分:2)
您正在导入/WEB-INF/config-context.xml
作为根应用程序上下文的一部分(一个由ContextLoaderListener
加载)以及您的Web上下文(由DispatcherServlet
加载)。您可以将其从DispatcherServlet
中删除。