Spring bean 生命周期

bean生命周期流程图

在这里插入图片描述

bean实例生命周期的执行过程如下

  1. 对bean实例化创建bean;
  2. 通过反射调用set方法进行属性的依赖注入;
  3. 如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法,来设置bean的name;
  4. 如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory()方法,将BeanFactory实例传进来,设置beanFactory;
  5. 如果bean实现了ApplicationContextAware接口,将调用setApplicationContext()方法将应用上下文的引用传入到bean中;
  6. 如果bean实现了BeanPostProcessor接口,它的前置处理方法postProcessBeforeInitialization 将被调用;
  7. 如果bean实现了InitializingBean接口,将调用它的afterPropertiesSet接口方法;
  8. 执行自定义的init方法;
  9. 如果bean实现了BeanPostProcessor接口,它的后置处理方法postProcessAfterInitialization 将被调用;
  10. 到此,bean已经完成准备,可以使用了;
  11. 最后就是销毁:若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用

其实大部分的时候上面说的这些接口,我们都不会去实现

不考虑这些接口时,的生命周期

1、单例管理
   当scope=”singleton”,即默认情况下,会在启动容器时(即实例化容器时)时实例化。但我们可以指定Bean节点的lazy-init=”true”来 延迟初始化bean,这时候,只有在第一次获取bean时才会初始化bean,即第一次请求该bean时才初始化。
2、非单例管理
   当scope=”prototype”时,容器也会延迟初始化 bean,Spring 读取 xml 文件的时候,并不会立刻创建对象,而是在每次请求bean时才初始化(如调用getBean方法时,相当于new xxxBean())。在第一次请求每一个 prototype 的 bean 时,Spring 容器都会调用其构造器创建这个对象,然后调用 init-method 属性值中所指定的方法。 对象销毁的时候,Spring容器不会帮我们调用任何方法,因为是非单例,这个类型的对象有很多个,Spring容器一旦把这个对象交给你之后,就不再管理这个对象了。

bean的作用域

在这里插入图片描述
参考 https://blog.csdn.net/fuzhongmin05/article/details/73389779

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值