如果您在 Spring 配置中的单例范围内定义服务,那么如果多个用户尝试同时访问它(即作为依赖项注入到您的控制器中),会发生什么情况?它应该引起任何冲突吗?或者 IoC 容器将保留后面的调用直到第一个调用完成?如果是这样,它会降低大型应用程序的性能,这对我来说听起来不合适。有人能给我一个正确的答案吗?
顺便说一句,据我记得,如果不是单例,IoC 容器将根据请求数量池化一些实例。有人可以证实一下吗?
如果多个用户尝试同时访问它(即作为依赖项注入到控制器中),会发生什么?
一个单例 bean 可以同时被多次访问。这就是为什么它总是必须是线程安全的
它应该引起任何冲突吗?
仅当您未能使其线程安全时
或者 IoC 容器将保留后面的调用直到第一个调用完成?
不,那会很糟糕
顺便说一句,据我记得,如果不是单例,IoC 容器将根据请求数量池化一些实例。有人可以证实一下吗?
Spring有以下范围(请参阅 Bean 范围参考 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes):
-
单例 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-singleton(每个应用程序仅管理一个实例)
-
原型 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-prototype(每次注入一个新实例)
-
session http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-session(每个 HTTP 会话一个实例,仅在 Spring MVC 中)
-
request http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-request(每个 HTTP 请求一个实例,仅在 Spring MVC 中)
-
全球会议 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-global-session(每个全局 HTTP 会话一个实例,仅在基于 portlet 的 Spring MVC 中)
Also:
从 Spring 3.0 开始,线程作用域可用,但默认情况下未注册。有关更多信息,请参阅文档SimpleThreadScope http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/context/support/SimpleThreadScope.html.
你所描述的是一个对象池。在 Spring 中,它将作为 Prototype 范围内的实现FactoryBean http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-extension-factorybean。在内部它会使用像这样的库阿帕奇共享/池 http://commons.apache.org/pool/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)