Spring 源码学习-基于注解IOC调用链(一)

Spring 源码学习-基于注解IOC调用链(一)

  下面调用链参考了子路的spring源码教程,其中序列号为调用的层级,相同的数字可以理解为在同一个方法中的同一层;不同数字,数字大的则表示为子方法,spring源码方法比较多,只将主干线的方法梳理了一下,不排除有理解不当或理解不到位的情况,欢迎评论指正。

root:AnnotationConfigApplicationContext实例化(传参:配置类class)
 1、父类GenericApplicationContext无参实例化,声明spring容器对象:new DefaultListableBeanFactory()
  2、this()方法
   3、声明AnnotatedBeanDefinitionReader对象:new AnnotatedBeanDefinitionReader(this)
    4、getOrCreateEnvironment_(registry)方法调用,加载系统变量、环境变量到spring中
     5、AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry)方法调用,加载spring 框架自己的处理器集合并存放如BeanDefineMap中。
   3、声明ClassPathBeanDefinitionScanner对象:new ClassPathBeanDefinitionScanner(this),此扫描 对象仅仅是用于开发人员手动注册扫描,真正用于spring框架初始化的扫描在注解@ComponentScan
中实现
  2、register(componentClasses)
   3、将配置类加载到spring容器BeanDefineMap集合中
(注:将beanDefine加入到beanDefineMap中,最里层的调用方法为:this.beanFactory.registerBeanDefinition(beanName, beanDefinition))
  2、refresh();
   3、prepareRefresh()方法调用,准备工作包括设置启动时间,是否激活标识位, 初始化属性源(property source)配置
   3、postProcessBeanFactory(beanFactory)方法调用,现目前是空方法,可能用于后期扩展
   3、invokeBeanFactoryPostProcessors(beanFactory)
    4、getBeanFactoryPostProcessors()获取得到用户自定义注册到spring中继承BeanFactoryPostProcessor的后置处理器
    4、beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false)获取得到spring内部自己维护的BeanFactoryPostProcessor后置处理器,此处为名称为:internalConfigurationAnnotationProcessor,类型为ConfigurationClassPostProcessor的后置处理器
     5、invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry),循环所有BeanDefinitionRegistryPostProcessor调用ConfigurationClassPostProcessor对象方法postProcessor.postProcessBeanDefinitionRegistry(registry),此方法为后置处理的接口方法
      6、processConfigBeanDefinitions(BeanDefinitionRegistry registry)方法中会新new一个ConfigurationClassParser parser对象,调用parser.parse(candidates)方法,用于spring项目扫描加载各个BeanDefinition
       7、ClassPathBeanDefinitionScanner.doScan(String… basePackages)执行文件扫描,注册加载BeanDefinition

注:采用AnnotationConfigApplicationContext(String… basePackages)实例化,会采用ClassPathBeanDefinitionScanner调用scan方法,然后调用ClassPathBeanDefinitionScanner.doScan方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值