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

 更新时间:2018年01月10日 14:54:43   作者:best.lei  
这篇文章主要介绍了浅谈Spring中Bean的作用域、生命周期,具有一定借鉴价值,需要的朋友可以参考下

本文主要探究的是关于Bean的作用域、生命周期的相关内容,具体如下。

Bean的作用域

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

1.singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。Singleton作用域是Spring中的缺省作用域,也可以显示的将Bean定义为singleton模式,配置为:

<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内有效。

<bean id="loginAction" class="com.cnblogs.Login" scope="request"/> ,针对每一次Http请求,Spring容器根据该bean的定义创建一个全新的实例,且该实例仅在当前Http请求内有效,而其它请求无法看到当前请求中状态的变化,当当前Http请求结束,该bean实例也将会被销毁。

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

<bean id="userPreference" class="com.ioc.UserPreference" scope="session"/>,同Http请求相同,每一次session请求创建新的实例,而不同的实例之间不共享属性,且实例仅在自己的session请求内有效,请求结束,则实例将被销毁。

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

Bean的生命周期

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

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

总结

以上就是本文关于浅谈Spring中Bean的作用域、生命周期的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • java之swing下拉菜单实现方法

    java之swing下拉菜单实现方法

    这篇文章主要介绍了java之swing下拉菜单实现方法,以实例形式较为详细的分析了基于swing的下拉菜单实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 深入学习Spring Cloud-Ribbon

    深入学习Spring Cloud-Ribbon

    这篇文章主要介绍了Spring Cloud-Ribbon的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友一起看看吧
    2021-03-03
  • Spring MVC 文件上传下载的实例

    Spring MVC 文件上传下载的实例

    本篇文章主要介绍了Spring MVC 文件上传下载的实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • SpringMVC核心技术

    SpringMVC核心技术

    这篇文章主要介绍了SpringMVC入门实例,在springmvc入门教程里算是比较不错的,结构也比较完整,需要的朋友可以参考。希望可以帮助到你
    2021-07-07
  • Java编写日历表的3种方式

    Java编写日历表的3种方式

    这篇文章主要为大家详细介绍了Java编写日历表的3种方式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Spring Boot 2.4配置特定环境时spring: profiles提示被弃用的原因分析

    Spring Boot 2.4配置特定环境时spring: profiles提示被弃用的原

    这篇文章主要介绍了Spring Boot 2.4配置特定环境时spring: profiles提示被弃用的原因,本文给大家分享详细解决方案,需要的朋友可以参考下
    2023-04-04
  • SpringBoot中@AutoConfiguration和@Configuration区别

    SpringBoot中@AutoConfiguration和@Configuration区别

    @AutoConfiguration是Spring Boot2.4引入的一个新注解,用于标记自动配置类,它是对传统@Configuration 注解的增强,下面就来详细的介绍一下这两者的区别,感兴趣的可以了解一下
    2025-09-09
  • MyBatis-Ext快速入门实战

    MyBatis-Ext快速入门实战

    MyBatis-Ext是MyBatis的增强扩展,和我们平常用的Mybatis-plus非常类似,本文主要介绍了MyBatis-Ext快速入门实战,感兴趣的可以了解一下
    2021-10-10
  • Java中的构造方法this、super的用法详解

    Java中的构造方法this、super的用法详解

    这篇文章较详细的给大家介绍了Java中的构造方法this、super的用法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-07-07
  • Java getResource()如何获取class文件目录位置

    Java getResource()如何获取class文件目录位置

    这篇文章主要介绍了Java getResource()如何获取class文件目录位置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论