spring bean 有五种作用域、生命周期

spring bean 有五种作用域、生命周期

spring bean 有五种作用域、两种管理Bean生命周期的方式。

1、五种作用域

a、Singleton (缺省作用域、单例类型)

容器中只存在一个共享的Bean,只要id与Bean定义相匹配,那就会是同一个Bean。在容器启动(实例化)时Bean就实例化和初始化(可以通过lazy-init="true"来设置使得Bean被调用时才初始化)。

b、Prototype (原型类型)

对有状态的Bean建议使用Prototype,对无状态建议使用Singleton。

容器启动时并没有实例化Bean,只有获取Bean时才会被创建,并且每一次都是新建一个对象。

c、request(web的Spring ApplicationContext下)

每个HTTP 都会有自己的Bean,当处理结束时,Bean销毁。

d、session(web的Spring ApplicationContext下)

每一个Http session有自己的Bean

e、global session(web的Spring ApplicationContext下)

global session作用域类似于标准的HTTP Session作用域,不过仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。

2、生命周期

spring bean 有五种作用域、生命周期

a、单例管理的对象

Bean在容器启动时就会实例化和初始化,但是可以通过Bean的设置来设置对象的初始化时机

第一种:通过设置<bean>

<bean id="ServiceImpl" class="cn.csdn.service.ServiceImpl" lazy-init="true"/>

第二种:通过设置<Beans>来修改所有bean默认方式的初始化时机

<beans default-lazy-init="true">

b、非单例管理的对象

Spring读取xml文件的时候,并不会立刻创建对象,而是在第一次请求该bean时才初始化(如调用getBean方法时)。 容器只会实例化和初始化Bean,不会销毁Bean。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。 在初始化后交由调用者管理

参考: https://blog.csdn.net/fuzhong…

这篇博客有更加详细介绍。

ps:由于本人学识有限,欢迎指出错误,相互交流学习。

原文 

https://segmentfault.com/a/1190000023287496

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » spring bean 有五种作用域、生命周期

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址