关于Spring中Application作用域Bean及ServletContext的理解确认
关于Spring Bean的Application作用域与ServletContext的答疑
1. ServletContext的本质
ServletContext不是Tomcat这类Servlet容器本身,而是每个Web应用在容器中运行时,容器为该应用单独创建的全局上下文对象:
- 在Tomcat中部署几个独立的Web应用(比如多个war包),每个应用都会拥有一个专属的
ServletContext实例 - 这些
ServletContext彼此完全隔离,数据、资源均不互通
2. 关于跨应用共享对象的理解纠正
你提到“单个Tomcat实例部署多个Web应用,用Application作用域Bean实现对象共享”的理解是错误的:
- Spring的
Application作用域Bean,本质上绑定到当前Web应用的ServletContext上,仅在当前应用内保持单例 - 不同Web应用的
ServletContext相互独立,各自的Application作用域Bean是完全不同的实例,无法跨应用共享
若要实现单个Tomcat实例下多个Web应用的对象共享,可参考这些方案:
- 利用Tomcat提供的全局JNDI资源
- 使用Redis等外部共享缓存
- 抽离独立的公共服务组件,让多个Web应用通过调用该组件获取共享数据
内容的提问来源于stack exchange,提问作者Shivam...
相关产品推荐
相关产品推荐

