美文网首页RxJavaJava编程语言爱好者
SpringBean的生命周期流程图

SpringBean的生命周期流程图

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2021-02-10 09:29 被阅读0次

    上一篇 <<<Spring IOC的初始化原理
    下一篇 >>>SpringBean单例情况下解决循环依赖的原理


    SpringBean生命周期的执行步骤

    1.进入到刷新refresh()方法
    2.finishBeanFactoryInitialization()初始化所有单例对象
    3.preInstantiateSingletons()初始化所有的单例对象:注意是非懒加载
    4、getBean(beanName)->doGetBean()->createBean()->doCreateBean()->createBeanInstance()初始化对象(默认情况下使用Java反射机制初始化对象,也可以通过CGLIB)
    5.populateBean()给对象的set属性赋值
    6.initializeBean()执行初始化方法(也可以自己定义初始化的方法)
    6.1.invokeAwareMethods()判断bean的类型是否是Aware相关依赖,如果存在的情况回调方法
    6.2.applyBeanPostProcessorsBeforeInitialization()在初始化方法之前执行处理(增强)
    6.3.invokeInitMethods()调用自定义的init方法,Java反射技术
    6.4.applyBeanPostProcessorsAfterInitialization()在初始化方法之后执行处理(增强)
    7.正常使用我们初始化好的这个Bean对象
    8.销毁bean

    BeanPostProcessor作用

    这个是后置处理器,从api分析可以看出
    1:后置处理器的postProcessorBeforeInitailization方法是在bean实例化,依赖注入之后及自定义初始化方法(例如:配置文件中bean标签添加init-method属性指定Java类中初始化方法、
    @PostConstruct注解指定初始化方法,Java类实现InitailztingBean接口)之前调用
    2:后置处理器的postProcessorAfterInitailization方法是在bean实例化、依赖注入及自定义初始化方法之后调用

    在过滤器如何使用spring注入的对象

    无法获取,因为过滤器无法拿到Spring的上下文

    BeanNameAware和BeanFactoryAware

    BeanNameAware是让Bean获取自己在BeanFactory配置中的名字(根据情况是id或者name)。
    BeanFactoryAware是让bean在初始化的时候就拿到配置它们的BeanFactory的引用,可以通过工厂做一些getBean等相关的事情,不过不建议这么做。


    推荐阅读:
    <<<Spring IOC的初始化原理
    <<<SpringBean单例情况下解决循环依赖的原理
    <<<Spring AOP的底层原理
    <<<Spring AOP通知责任链模式图解
    <<<Spring AOP核心源码解读
    <<<Spring事务常识汇总
    <<<Spring声明事务原理及核心源码分析
    <<<手动事务和自定义注解事务代码参考
    <<<Spring常用注解汇总

    相关文章

      网友评论

        本文标题:SpringBean的生命周期流程图

        本文链接:https://www.haomeiwen.com/subject/fzxqxltx.html