Spring Bean 的生命周期,如何被管理的?
定义
bean是一个被实例化,组装,并通过spring ioc容器(beanfactory和applicationcontext容器)所管理的对象。
作用域
spring支持五个作用域,分别是singleton、prototype、request、session、global session
作用域 |
说明 |
singleton | singleton 是默认的作用域,在spring ioc容器仅存在一个bean实例,bean以单例方式存在,在创建起容器时就同时自动创建了一个bean的对象 |
prototype | 每次从容器中调用bean时,都返回一个新的实例,即每次调用getbean()时,相当于执行newxxxbean()。prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象 |
request | 每次http请求都会创建一个新的bean,该作用域仅适用于webapplicationcontext环境 |
session | 同一个http session共享一个bean,不同session使用不同的bean,仅适用于webapplicationcontext环境 |
global-session |
一般用于portlet应用环境,该运用域仅适用于webapplicationcontext环境 |
生命周期
bean的生命周期可以表达为:bean的实例化(定义)- bean的初始化 - bean的使用 - bean的销毁
1、实例化一个bean--也就是我们常说的new;
2、按照spring上下文对实例化的bean进行配置(属性注入)--也就是ioc注入;
3、如果这个bean已经实现了beannameaware接口,会调用它实现的setbeanname(string)方法,此处传递的就是spring配置文件中bean的id值
4、如果这个bean已经实现了beanfactoryaware接口,会调用它实现的setbeanfactory(setbeanfactory(beanfactory)传递的是spring工厂自身(可以用这个方式来获取其它bean,只需在spring配置文件中配置一个普通的bean就可以);
5、如果这个bean已经实现了applicationcontextaware接口,会调用setapplicationcontext(applicationcontext)方法,传入spring上下文(同样这个方式也可以实现步骤4的内容,但比4更好,因为applicationcontext是beanfactory的子接口,有更多的实现方法);
6、如果这个bean关联了beanpostprocessor接口,将会调用postprocessbeforeinitialization(object obj, string s)方法,beanpostprocessor经常被用作是bean内容的更改,并且由于这个是在bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术;
7、如果bean在spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。
8、如果这个bean关联了beanpostprocessor接口,将会调用postprocessafterinitialization(object obj, string s)方法、;
注:以上工作完成以后就可以应用这个bean了,那这个bean是一个singleton的,所以一般情况下我们调用同一个id的bean会是在内容地址相同的实例,当然在spring配置文件中也可以配置非singleton。
9、当bean不再需要时,会经过清理阶段,如果bean实现了disposablebean这个接口,会调用那个其实现的destroy()方法;
10、最后,如果这个bean的spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。
上一篇: Python学习笔记Day4
推荐阅读
-
系统的任务管理器被锁定了如何解除
-
spring源码分析系列5:ApplicationContext的初始化与Bean生命周期
-
Mybaits 源码解析 (十二)----- Mybatis的事务如何被Spring管理?Mybatis和Spring事务中用的Connection是同一个吗?
-
Spring 的 Bean 生命周期,11 张高清流程图及代码,深度解析
-
Spring中bean对象的生命周期
-
谈谈我对Spring Bean 生命周期的理解
-
Spring 框架基础(02):Bean的生命周期,作用域,装配总结
-
bean装载到Spring应用上下文的生命周期
-
Spring Bean的生命周期,《Spring 实战》书中的官方说法
-
在servlet中如何使用被Spring管理的service