【发布时间】:2011-09-22 23:39:36
【问题描述】:
我对 3 个范围(即请求、原型和单例)有点困惑 http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html。我的疑问是:-
RequestScope :-假设一个 web 请求来自客户端,在同一个请求中,我们使用语句 factory.getBean("MyBean1") 创建 bean 它会返回两个不同的实例吗?我的理解是它将返回与在同一个 http 请求下完成的实例相同的实例。正确的?虽然它会返回两个不同的 原型请求的实例。对吗?
原型:每次对特定 bean 发出请求时,都会创建一个新的 bean 实例。 根据经验,您应该对所有有状态的 bean 使用原型范围,而对无状态 bean 应该使用单例范围。 它与请求范围有何不同以及它对有状态 bean 的支持有何不同。
Singleton:- 它写在 4.4.1 下的部分。
请注意 Spring 的单例 bean 概念与开创性中定义的单例模式有很大不同 四人帮 (GoF) 模式书。 GoF Singleton 对对象的范围进行硬编码,使得特定对象的一个且只有一个实例 每个 ClassLoader 都会创建一个类。 Spring 单例的范围最好按照容器和 bean 来描述。
我的问题是关于“Spring 单例的范围最好按照容器和每个 bean 来描述”
每个容器:-我们可以在任何应用程序中拥有多个核心容器吗?我的理解是 如果我们在一个应用程序中创建 BeanFactory factory = new XmlBeanFactory("MyXml") 两次,我们可以说存在两个容器实例。对吗? 在这种情况下,即使声明为单例,我们也可以创建两个 bean 实例。这是正确的吗?
在一些网站上说,Spring 核心容器避免了对单例编程的需要。这是否意味着我们不必为单例容器编写代码 将为我们提供。正确的?这里的问题是如果我们在 bean 中声明公共构造函数。容器是否仍会为该 bean 提供单例(范围是该 bean 的 xml 文件中的单例)?
【问题讨论】:
标签: spring