【问题标题】:Singleton resources shared by several MVC controllers in JavaJava中多个MVC控制器共享的单例资源
【发布时间】:2011-09-29 09:58:04
【问题描述】:
有没有办法让多个控制器使用单例资源?
我们有 2 个 servlet,每个都有自己的应用程序上下文:one-servlet.xml & two-servlet.xml 和 lib-context.xml 以及单例 bean“util”。
现在,如果我们将 lib-context.xml 导入上述 2 个 servlet 上下文中的每一个,spring 将为每个 servlet 创建一个单独的应用程序上下文,我们最终将得到 2 个单例对象。
有没有办法配置应用程序只创建一个单例对象?
【问题讨论】:
标签:
java
model-view-controller
servlets
spring-mvc
singleton
【解决方案1】:
是的。在您的web.xml 中,使用ContextLoaderListener 加载lib-context.xml,而不是使用DispatcherServlet 加载它。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/lib-context.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
您可以从特定于 servlet 的应用上下文配置文件中删除导入。
所有DispatcherServlets 不仅会看到上面共享的lib-context.xml,还会看到他们自己加载的任何上下文。
(您可能需要调整我给出的param-value 示例。该路径只是一个示例。)