Spring中Bean的作用域、生命周期

Bean的作用域(scope)

  Spring 3定义了五种作用域,分别为singleton(单例)、prototype(原型)、request、session、global session,五种作用域如下:

  1.singleton:单列模式,Spring Ioc容器中只会存在一个共享的bean实例,无论有多少个Bean引用它,始终都是指向同一个对象。singleton是spring中bean的缺省作用域,

              <bean id="userDao" class="com.ioc.UserDaoImpl" scope="singleton"/>  

  2.prototype:原型模式,每次通过spring容器获取prototype定义的bean时,容器都会创建一个新的bean实例,每个Bean实例都有自己的属性和状态,而singleton全局只有一个对象。根据经验,对有状态的bean使用prototype作用域,而对无状态的bean使用singleton作用域。

       3.request:在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效。

  4.session:在一次Http Session中,容器会返回该Bean的同一实例。而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。

  5.global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在portlet web中时有效。

Bean的生命周期

  经过如上对Bean作用域的介绍,接下来将在Bean作用域的基础上讲解Bean的生命周期。

  Spring容器可以管理singleton作用域下Bean的生命周期,在此作用域下,Spring能够精确地知道Bean何时被创建,何时初始化完成,以及何时被销毁。而对于prototype作用域的Bean,Spring只负责创建,当容器创建了Bean的实例后,Bean的实例就交给了客户端的代码管理,Spring容器将不再跟踪其生命周期,并且不会管理那些被配置成prototype作用域的Bean的生命周期。Spring中Bean的生命周期的执行是一个很复杂的过程,读者可以利用Spring提供的方法来定制Bean的创建过程。Spring容器在保证一个bean实例能够使用之前会做很多工作

 

posted @ 2019-04-10 15:10  Zuul  阅读(514)  评论(0编辑  收藏  举报