美文网首页
spring初始化涉及的类和函数

spring初始化涉及的类和函数

作者: 继李扶危 | 来源:发表于2018-10-18 18:16 被阅读0次

    SpringApplication
    1、createApplicationContext():创建默认的ApplicationContext,在其中添加默认的bean,默认添加的bean在后续初始化中使用的到,其中包括3个BeanPostProcessor,分别为AutowiredAnnotationBeanPostProcessor(处理@AutoWired注解)、CommonAnnotationBeanPostProcessor(处理@PostConstruct、@PreDestroy以及@Resource 由java提供的注解)以及RequiredAnnotationBeanPostProcessor(处理@Required注解)。

    2、prepareContext():把用户传入的资源(类)添加到BeanFactory,用户传入的类一般具有bean扫描功能或通过其他方式导入bean的功能,如有@ComponentScan注解等,在ApplicationContext中添加BeanfactoryPostProcessor,

    3、invokeBeanFactoryPostProcessors():执行BeanFactoryPostProcessor,完成前期bean的注册。

    4、afterRefresh():执行ApplicationRunner和CommandLineRunner。

    AbstractApplicationContext
    1、prepareRefresh():没有做什么操作;

    2、obtainFreshBeanFactory():获取当前ApplicationContext中的BeanFactory;

    3、prepareBeanFactory():为BeanFactory初始化做准备,如通过registerResolvableDependency()添加被依赖类型的默认值,添加BeanPostProcessor,添加预先实例化的单例对象;

    4、postProcessBeanFactory():根据ApplicationContext类不同有些实现类是空函数;

    5、invokeBeanFactoryPostProcessors(beanFactory);
    5.1、执行ApplicationContext中的BeanFactoryPostProcessor,
    5.2、在处理过程中会循环获取BeanFactory中的BeanFactoryPostProcessor,先执行BeanFactory中注册的BeanFactoryPostProcessor,执行完毕后检测BeanFactory中有没有增加新的BeanFactoryPostProcessor,如果有继续执行,直到所以的BeanFactoryPostProcessor都处理完,
    5.3、循环处理的原因是BeanFactoryPostProcessor在处理时可能引入新的BeanFactoryPostProcessor。在这里会处理@EnableConfigurationProperties、@Configuration、@Bean等注解。执行完后完成Bean的注册(此时完成了Bean的注册,但是Bean还没有实例化)

    6、registerBeanPostProcessors()会在BeanFactory中注册BeanPostProcessor,这些BeanPostProcessor并没有注册到容器中,这些BeanPostProcessor用于自动注入等操作;

    7、finishBeanFactoryInitialization():完成Bean的实例化、属性的自动注入以及其他Bean的初始化(@PostConstruct等注解的函数等等),调用BeanPostProcessor完成属性注入等操作,在AbstractAutowireCapableBeanFactory的initializeBean()函数中会调用所有在registerBeanPostProcessors()中注册的BeanPostProcessor;

    相关文章

      网友评论

          本文标题:spring初始化涉及的类和函数

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