`
moshowgame
  • 浏览: 42299 次
  • 性别: Icon_minigender_1
  • 来自: 潮州
社区版块
存档分类
最新评论

spring的Bean scopes(作用域)

阅读更多

Bean scopes(作用域)

singleton(单例)当一个bean的作用域为singleton,那Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。这是默认的作用域。


Prototype(原型)作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。


*。对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责:容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。

 

*.根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

 

request请求、session会话、global session全局会话

仅在web应用中使用,一般用得很少,可以忽略。或查阅参考文档3.4.4

 

情景:接昨天所学,spring准备将一个参考UserDAOImpl实现的UserDAO实例userDAO注入到UserService的实例userService中去

 

<bean name="u"

class="com.bjsxt.dao.impl.UserDAOImpl">

</bean>

<bean id="userService

class="com.bjsxt.service.UserService"  scope="prototype">

<property name="userDAO" ref="u" />

</bean>

 

【JUNIT测试代码段:】

UserService service1 =

  (UserService)ctx.getBean("userService");

UserService service2 =

  (UserService)ctx.getBean("userService");

System.out.println(service1 == service2);

 

∴控制台输出的结果是false。因为不是同一个对象。

 

如果:

<bean name="u"

class="com.bjsxt.dao.impl.UserDAOImpl">

</bean>

<bean id="userService

class="com.bjsxt.service.UserService scope="singleton">

<property name="userDAO" ref="u" />

</bean>

 

∴控制台输出的结果是true。因为都是同一个对象。

 

 

⊙_⊙最后,按照我的惯例,附上本次的项目源码(来自尚学堂马士兵的源码),类库用到三个(spring.jar  junit.jar(eclipse自带) commons-logging.jar,缺少类库可以到http://moshowgame.iteye.com/admin/blogs/1606825下)。

^_^还有什么好方法或者疑问和意见欢迎大家提出来一起讨论!

  • 大小: 69.5 KB
  • 大小: 69.5 KB
8
9
分享到:
评论

相关推荐

    Spring.Bean.Scopes.Example

    在Spring框架中,Bean的Scope是管理对象生命周期和作用域的关键概念。Bean的Scope定义了在应用程序上下文中如何创建和管理Bean的实例。本示例着重于两种主要的Bean Scope:单例(Singleton)和原型(Prototype),并...

    spring工程需要的四个核心jar包之beans包

    4. **Bean的作用域(Scopes)** - Spring提供了多种Bean的作用域,包括单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)和全局会话(Global Session)。这些作用域决定了Bean的实例化策略...

    spring学习指南

    2. **bean的作用域(Bean Scopes)** - **2.1 Singleton**:每个bean定义只有一个实例,全局共享。 - **2.2 Prototype**:每个请求(或配置)都会创建一个新的bean实例。 - **2.3 Request**:在Web应用中,每个...

    spring-reference.pdf

    - **New bean scopes**: 添加了新的作用域类型,如`request`、`session`等,用于更好地管理和控制Bean的生命周期。 - **Extensible XML authoring**: 允许用户通过自定义命名空间扩展Spring的配置文件结构,提供了更...

    spring-reference

    - **Other Scopes**:除了单一实例和原型模式外,Spring还支持会话作用域、请求作用域等多种其他作用域类型。 - **Custom Scopes**:开发者还可以根据实际需求自定义Bean的作用域。 ### 总结 Spring 2.0版本在原有...

    Spring5.0中文开发手册

    - **3.5 Bean作用域** - **3.5.1 单例作用域** - 单例bean在整个Spring IoC容器中只有一个实例。 - **3.5.2 The prototype作用域** - 每次请求时都会创建一个新的bean实例。 - **3.5.3 Singleton beans with ...

    spring2.5-英文文档1

    - 新的Bean作用域(New bean scopes) Spring 2.5引入了更多的Bean作用域,如prototype(原型)和session,使得开发者可以更灵活地控制Bean的生命周期。 - 更简单的XML配置(Easier XML configuration) 2.5版本...

    SPRING 开发指南

    Spring定义了多种Bean的作用域,包括Singleton(单例)、Prototype(原型)、Request、Session、Global Session等。Singleton Bean在整个容器生命周期内只有一个实例,而Prototype Bean每次请求都会创建一个新的...

    Spring 2 参考

    - **New bean scopes**:引入了新的bean作用域,如`request`和`session`等,这些作用域特别适用于Web应用中的特定场景。 - **Extensible XML authoring**:通过提供更多的自定义选项,Spring 2.0使得XML配置更加灵活...

    spring4 中文API

    - **Beans scopes**:解释了不同作用域下的Bean实例化行为。 - **Customizing the nature of a bean**:讲述了如何定制Bean的行为,如初始化、销毁方法等。 - **Bean definition inheritance**:说明了如何通过继承...

    spring web flow 官方文档

    Spring Web Flow采用了一种层次化的范围搜索算法,当访问一个EL变量时,它会按照预定义的顺序在不同的作用域中查找该变量,确保了数据访问的正确性和高效性。 ### 五、Rendering views #### 5.1 Introduction 视图...

    SpringWorkshop:Spring工作坊

    然后是**豆范围(Bean Scopes)**,Spring支持多种Bean的作用域,包括单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)等。理解不同作用域的含义和使用场景是确保应用程序正确运行的关键。...

Global site tag (gtag.js) - Google Analytics