我在我的 Spring 应用程序上下文文件中定义了一个 UserCredetniasDatSourceAdapter。我还通过 DelegatingFilterProxy 向 Spring 添加了一个自定义过滤器。
该过滤器使用@Autowire 来获取对DataSource Bean 的引用。我还在我的 DAO 中 @Autowire 数据源。当我调试时,我看到过滤器和 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 个实例。我假设一个用于应用程序,一个用于每个请求(线程)?有没有办法指定使用哪个上下文?也许过滤器不是答案,我需要使用 AOP。如果可能的话,需要研究如何在@Aspect 中注入 bean。
谢谢!!
-乔