spring源码-bean加载整体流程

spring源码-bean加载整体流程

内容概述

本文主要记录spring源码中初始化、实例化bean的整体流程,后面会单独拆开分析spring在初始化中的详细步骤;我在学习的时候,是以Java配置的方式,来学习spring的。所以,就以AnnotationConfigApplicationContext为例了

入口

在spring启动的时候,会通过AbstractApplicationContext的子类来初始化,如果我们指定了对应的配置类,会通过下面的构造函数开始spring的初始化

public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {
   
    this();
	register(annotatedClasses);
	refresh();
}
这个方法中,有三个方法,来依次分析三行代码完成的操作

this()

先说这代码完成的操作:
1、初始化了一个AnnotatedBeanDefinitionReader()对象,在初始化该对象的时候,将spring在后面对业务类进行初始化时,需要用到的一些后置处理器,存入了beanDefinitionMap中,我们姑且称这些为spring自带的beanPostProcessor和beanFactoryPostProcessor;
org.springframework.context.annotation.AnnotationConfigUtils#registerAnnotationConfigProcessors(org.springframework.beans.factory.support.BeanDefinitionRegistry, java.lang.Object)
这个方法中,将spring自带的beanPostProcessor和beanFactoryPostProcessor放到了beanDefinitionMap中;可以debug一下来看下

  • ConfigurationClassPostProcessor
  • AutowiredAnnotationBeanPostProcessor
  • CommonAnnotationBeanPostProcessor
  • EventListenerMethodProcessor
  • DefaultEventListenerFactory
  • PersistenceAnnotationBeanPostProcessor

在这几个bean中,有一个bean需要特别注意一下,ConfigurationClassPostProcessor;这个类是BeanDefinitionRegistryPostProcessor的实现类,BeanDefinitionRegistryPostProcessor又是BeanFactoryPostProcessor的子接口,这个类在扫描bean的时候 有用到;这几个类,后面学习spring扫描bean的时候会详细介绍
在这里插入图片描述

2、初始化了一个ClassPathBeanDefinitionScanner对象,在初始化该对象的时候,对两个list集合进行了赋值
private final List includeFilters = new LinkedList<>();

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值