zoukankan      html  css  js  c++  java
  • spring bean生命周期和作用域

    1.spring bean生命周期和作用域

    在前面博客中提到容器启动获得BeanDefinition对象中有一个scope 属性。该属性控制着bean对象的作用域。本章节介绍Bean的作用域及生命周期,了解bean是怎么来的又怎么没的。

    一、Bean的作用域
    Bean容器启动会读取beanxml配置文件,然后将xml中每个bean元素分别转换成BeanDefinition对象。在BeanDefinition对象中有scope 属性,就是它控制着bean的作用域。
    Spring框架支持5种作用域,有三种作用域是当开发者使用基于webApplicationContext的时候才生效的。下面就是Spring直接支持的作用域了,当然开发者也可以自己定制作用域。

    一、Bean的生命周期
    前面章节介绍了bean容器以及bean的配置与注入,本章节学习bean的生命周期,了解bean是怎么来的又是怎么没的。

    ApplicationContext容器中,Bean的生命周期流程如上图所示,流程大致如下:
    1.首先容器启动后,会对scopesingleton且非懒加载的bean进行实例化,
    2.按照Bean定义信息配置信息,注入所有的属性,
    3.如果Bean实现了BeanNameAware接口,会回调该接口的setBeanName()方法,传入该Beanid,此时该Bean就获得了自己在配置文件中的id
    4.如果Bean实现了BeanFactoryAware接口,会回调该接口的setBeanFactory()方法,传入该BeanBeanFactory,这样该Bean就获得了自己所在的BeanFactory
    5.如果Bean实现了ApplicationContextAware接口,会回调该接口的setApplicationContext()方法,传入该BeanApplicationContext,这样该Bean就获得了自己所在的ApplicationContext
    6.如果有Bean实现了BeanPostProcessor接口,则会回调该接口的postProcessBeforeInitialzation()方法,
    7.如果Bean实现了InitializingBean接口,则会回调该接口的afterPropertiesSet()方法,
    8.如果Bean配置了init-method方法,则会执行init-method配置的方法,
    9.如果有Bean实现了BeanPostProcessor接口,则会回调该接口的postProcessAfterInitialization()方法,
    10.经过流程9之后,就可以正式使用该Bean,对于scopesingletonBean,Springioc容器中会缓存一份该bean的实例,而对于scopeprototypeBean,每次被调用都会new一个新的对象,期生命周期就交给调用方管理了,不再是Spring容器进行管理了
    11.容器关闭后,如果Bean实现了DisposableBean接口,则会回调该接口的destroy()方法,
    12.如果Bean配置了destroy-method方法,则会执行destroy-method配置的方法,至此,整个Bean的生命周期结束。

    这里在UserBean类基础上进行改造,增加了name属性并实现了ApplicationContextAware接口。

     

  • 相关阅读:
    1893. 检查是否区域内所有整数都被覆盖 差分数组
    138. 复制带随机指针的链表 链表
    5815. 扣分后的最大得分 dp
    1838. 最高频元素的频数 滑动窗口
    1818. 绝对差值和 二分
    218. 天际线问题 set 扫描线
    【AutoAugment】2019-CVPR-AutoAugment: Learning Augmentation Strategies from Data-论文阅读
    【Few-shot NAS】2021-ICMLo-Few-shot Neural Architecture Search-论文阅读
    【CompConv】2021-CVPRw-CompConv: A Compact Convolution Module for Efficient Feature Learning-论文阅读
    【InstaNAS】2020-AAAI-InstaNAS: Instance-aware Neural Architecture Search-论文阅读
  • 原文地址:https://www.cnblogs.com/qinzhenyu/p/11752134.html
Copyright © 2011-2022 走看看