spring容器生命周期执行原理探究

一、api分析

首先看下AutowireCapableBeanFactory接口简单api,有下面接口可以简单的看到api中包含了创建bean,初始化,以及初始化前后的后置处理器api
初始化:
Object initializeBean(Object var1, String var2)
初始化前:
Object applyBeanPostProcessorsBeforeInitialization(Object var1, String var2)
初始化后:
Object applyBeanPostProcessorsAfterInitialization(Object var1, String var2)

public interface AutowireCapableBeanFactory extends BeanFactory {
    int AUTOWIRE_NO = 0;
    int AUTOWIRE_BY_NAME = 1;
    int AUTOWIRE_BY_TYPE = 2;
    int AUTOWIRE_CONSTRUCTOR = 3;
    /** @deprecated */
    @Deprecated
    int AUTOWIRE_AUTODETECT = 4;
    String ORIGINAL_INSTANCE_SUFFIX = ".ORIGINAL";

    <T> T createBean(Class<T> var1) throws BeansException;

    void autowireBean(Object var1) throws BeansException;

    Object configureBean(Object var1, String var2) throws BeansException;

    Object createBean(Class<?> var1, int var2, boolean var3) throws BeansException;

    Object autowire(Class<?> var1, int var2, boolean var3) throws BeansException;

    void autowireBeanProperties(Object var1, int var2, boolean var3) throws BeansException;

    void applyBeanPropertyValues(Object var1, String var2) throws BeansException;

    Object initializeBean(Object var1, String var2) throws BeansException;

    Object applyBeanPostProcessorsBeforeInitialization(Object var1, String var2) throws BeansException;

    Object applyBeanPostProcessorsAfterInitialization(Object var1, String var2) throws BeansException;

    void destroyBean(Object var1);

    <T> NamedBeanHolder<T> resolveNamedBean(Class<T> var1) throws BeansException;

    @Nullable
    Object resolveDependency(DependencyDescriptor var1, @Nullable String var2) throws BeansException;

    @Nullable
    Object resolveDependency(DependencyDescriptor var1, @Nullable String var2, @Nullable Set<String> var3, @Nullable TypeConverter var4) throws BeansException;
}

2、具体执行过程

  • 具体执行过程在AbstractAutowireCapableBeanFactory类内
    在初始化方法内,会先后执行applyBeanPostProcessorsBeforeInitializationapplyBeanPostProcessorsAfterInitialization

    image.png

  • applyBeanPostProcessorsBeforeInitializationapplyBeanPostProcessorsAfterInitialization执行过程会获取容器中的BeanPostProcessor依次执行

    image.png

  • 实际初始化方法利用反射执行
    初始化方法定义可以通过
    生命周期-InitializingBean和DisposableBean生命周期-@PostConstruct&@PreDestroy

    image.png

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 自己备忘,随便写 android网络框架源码解析及对比 android常用网络框架对比 Volley: 特点 基于...
    幻海流心阅读 1,579评论 0 4
  • 此文主要讲了Spring中,Bean的生命周期,初始化动作,销毁动作是如何执行。 以及关系生命周期各个接口的作用和...
    _Zy阅读 781评论 0 5
  • 本文较长(建议阅读时间30min) 所谓的将组件注入容器中包含两方面,一是组件最先肯定是通过"org.xxxx.C...
    Sophie12138阅读 4,977评论 2 12
  • Java设计模式——代理模式 代理模式主要分为接口,委托类,代理类 接口:规定具体方法委托类:实现接口,完成具体的...
    vczyh阅读 678评论 0 0
  • 到店里后,我们和前台说我们预约了位置,可是前台说没有登记到我们的,于是我拿出通话记录给他们看,后来他们问清楚交接班...
    欢欢简书阅读 215评论 0 0