当前位置: 移动技术网 > IT编程>开发语言>Java > Spring Bean 的生命周期,如何被管理的?

Spring Bean 的生命周期,如何被管理的?

2019年03月22日  | 移动技术网IT编程  | 我要评论

定义

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属性,会自动调用其配置的销毁方法。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网