Spring-bean的生命周期

在我的面试经验中,这个是必问的问题,几乎每家公司都会问一下这个。答不上来基本没戏!
基本生命周期就如下图所示了:


如果还想详细一点如下: 

1、Spring支持五个作用域:singleton、prototype、request、session、global session

  1. singleton :默认的作用域 spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,在创建起容器时就同时自动创建了一个bean的对象
  2. prototype:每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象
  3. request:每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
  4. session:同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境
  5. global-session:一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境

2、生命周期: 

简单点说就是:bean的实例化–>bean的初始化–>bean的使用–>bean的销毁

  1. 实例化:也就是new一个对象
  2. 属性注入:Spring上下文对实例化的bean进行配置(IOC注入)
  3. 设置beanId:如果实现BeanNameAware接口,调用setBeanName()方法设置ID
  4. 调用BeanFactoryAware.setBeanFactory(setBeanFactory(BeanFactory):可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以;
  5. 调用ApplicationContextAware.setApplicationContext(ApplicationContext):与BeanFactoryAware.setBeanFactory同样作用,但是ApplicationContextAware是子接口,可以实现更多接口;
  6. 实例化之前调用:BeanPostProcessor.postProcessBeforeInitialization(Object obj, String s)方法调用,
  7. 实例化:如果在spring配置中还配置了init-method属性,会自动调用该方法;
  8. 实质化之后调用:如果关联BeanPostProcessor接口,调用postProcessAfterInitialization(Object obj, String s)方法,
  9. 注:前面这里我们就完成bean的实例化;
  10. bean的销毁:当bean不再被使用时,就会调用destroy()方法;
  11. bean销毁调用方法:如果配置了destroy-method方法,会自动调用该方法;

以上就是spring对Bean生命周期的全部过程。

原文:https://blog.csdn.net/keenstyle/article/details/104820909

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值