spring之DefaultListableBeanFactory的bean的创建过程

一、DefaultListableBeanFactory简介
    DefaultListableBeanFactory是bean加载的核心部分,是Spring注册及加载的默认实现。继承关系如下图:

    AbstractAutowireCapableBeanFactory完成Bean的 创建,属性的注入,切面代理的产生,bean的生命周期的管理。

二、AbstractAutowireCapableBeanFactory源码分析
    doCreateBean方法完成了bean的 创建和初始化


    Spring容器中默认注册了多个后置处理器。实现 InstantiationAwareBeanPostProcessor接口的类,在bean实例化前后和初始化前后会调用相应的实现方法。
    1. createBeanInstance():通过反射实现实例化bean。
    2. addSingletonFactory():如果是单例,加入到单例池中。
    3. populateBean():注入属性对象
        3.1 遍历BeanPostProcessor列表,回调postProcessAfterInstantiation()方法。
        3.2 遍历BeanPostProcessor列表,回调postProcessPropertyValues()方法。
             CommonAnnotationBeanPostProcessor:注入@Resource注释的对象。
             AutowiredAnnotationBeanPostProcessor:注入@Autowired注释的对象。
             RequiredAnnotationBeanPostProcessor校验@Required注释的方法是否调用。
    4. initializeBean():初始化bean。
        4.1 遍历BeanPostProcessor列表,回调postProcessBeforeInitialization()方法。
            ApplicationContextAwareProcessor:回调实现了EnvironmentAware,EmbeddedValueResolverAware,ResourceLoaderAware,ApplicationEventPublisherAware,ApplicationContextAware等接口的方法,注入对应的Environment,StringValueResolver,ResourceLoader,ApplicationEventPublisher,ApplicationContext对象。
            ServletContextAwareProcessor:回调实现了ServletContextAware,ServletConfigAware等接口的方法,注入对应的ServletContext,ServletConfig对象。
        4.2 如果实现InitializingBean接口就回调bean的afterPropertiesSet()方法。
        4.3 如果bean配置了initMethod属性,执行initMethod指定的方法。
        4.4 遍历BeanPostProcessor列表,回调postProcessAfterInitialization()方法。
            ApplicationListenerDetector:注册ApplicationListener。

猜你喜欢

转载自ncs123.iteye.com/blog/2404314