Spring 3中为Bean定义了5中做用域,分别为singleton(单例)、prototype(原型)、request、session和global session,5种做用域说明以下:html
- singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,不管有多少个Bean引用它,始终指向同一对象。Singleton做用域是Spring中的缺省做用域,也能够显示的将Bean定义为singleton模式,配置为:
- <bean id="userDao" class="com.ioc.UserDaoImpl" scope="singleton"/>
- prototype:原型模式,每次经过Spring容器获取prototype定义的bean时,容器都将建立一个新的Bean实例,每一个Bean实例都有本身的属性和状态,而singleton全局只有一个对象。根据经验,对有状态的bean使用prototype做用域,而对无状态的bean使用singleton做用域。
- request:在一次Http请求中,容器会返回该Bean的同一实例。而对不一样的Http请求则会产生新的Bean,并且该bean仅在当前Http Request内有效。
- <bean id="loginAction" class="com.cnblogs.Login" scope="request"/>,针对每一次Http请求,Spring容器根据该bean的定义建立一个全新的实例,且该实例仅在当前Http请求内有效,而其它请求没法看到当前请求中状态的变化,当当前Http请求结束,该bean实例也将会被销毁。
- session:在一次Http Session中,容器会返回该Bean的同一实例。而对不一样的Session请求则会建立新的实例,该bean实例仅在当前Session内有效。
- <bean id="userPreference" class="com.ioc.UserPreference" scope="session"/>,同Http请求相同,每一次session请求建立新的实例,而不一样的实例之间不共享属性,且实例仅在本身的session请求内有效,请求结束,则实例将被销毁。
- global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。
通过如上对Bean做用域的介绍,接下来将在Bean做用域的基础上讲解Bean的生命周期。session
Spring容器能够管理singleton做用域下Bean的生命周期,在此做用域下,Spring可以精确地知道Bean什么时候被建立,什么时候初始化完成,以及什么时候被销毁。而对于prototype做用域的Bean,Spring只负责建立,当容器建立了Bean的实例后,Bean的实例就交给了客户端的代码管理,Spring容器将再也不跟踪其生命周期,而且不会管理那些被配置成prototype做用域的Bean的生命周期。Spring中Bean的生命周期的执行是一个很复杂的过程,读者能够利用Spring提供的方法来定制Bean的建立过程。Spring容器在保证一个bean实例可以使用以前会作不少工做:spa


本篇博客转载自:http://www.cnblogs.com/zrtqsk/p/3735273.html。prototype