spring源码入门学习 spring源码讲解_spring源码解析


Spring 运行原理 :
Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的 Bean 配置注册表,然后根据这张注册表实例化 Bean,装配好 Bean 之间的依赖关系,为上 层应用提供准备就绪的运行环境。


spring源码入门学习 spring源码讲解_spring源码入门学习_02


然后spring容器会定义一个Bean注册表,之后会根据注册表的信息,去加载到Bean实现类,实例化bean的实现类,在实例化的过程当中,完成一个依赖注入,然后被实例化的bean对象还是会被放到spring容器当中,放到它的缓存池里。


源码解析:解析它的启动的过程和怎么去获取bean对象。

一、 ApplicationContext
第一步它会去创建ApplicationContext ,它是Spring中的一个IOC容器,在Spring中,IOC容器有很多种,如:

Spring 中有两个主要的容器系列:
1)实现 BeanFactory 接口的简单容器;

2)实现 ApplicationContext 接口的高级容器。

BeanFactory只是一个简单的容器,它只是提供了对生命周期的管理。


spring源码入门学习 spring源码讲解_实例化_03


ApplicationContext在应用这个DefaultListableBeanFactory对象的基础上,不仅实现了 BeanFactory 接口提供的功能方法,并且黏合了一些面向应用的功能,如资源/国际化支持/ 框架事件支持等 
public interface ApplicationContext extends EnvironmentCapable, 
ListableBeanFactory, //继承于 BeanFactory 
HierarchicalBeanFactory,//继承于 BeanFactory 
MessageSource, 
ApplicationEventPublisher,
ResourcePatternResolver //继承ResourceLoader,用于获取 resource 对象


spring源码入门学习 spring源码讲解_初始化_04


spring源码入门学习 spring源码讲解_初始化_05


spring源码入门学习 spring源码讲解_实例化_06


最后它调用了refresh方法,这个方法是容器初始化的一个很重要的入口方法


spring源码入门学习 spring源码讲解_实例化_07


spring源码入门学习 spring源码讲解_实例化_08


spring源码入门学习 spring源码讲解_spring源码深度解析_09


spring源码入门学习 spring源码讲解_spring源码深度解析_10


spring源码入门学习 spring源码讲解_spring源码解析_11


点进去:


spring源码入门学习 spring源码讲解_spring源码入门学习_12


至于为什么这么调:

refresh是容器初始化,所以设置为true,这个true你可以在这一节第二张图片里面看到,不是从头开始第二张,它对容器进行初始化,

而调用obtainFreshFactory完全是因为它创建的bean工厂,里面装载了bean,所以跳这个方法,当然,我说的这些东西都是纯自我理解,

而bean工厂创建完毕后,则开始注册bean,bean的定义都是在配置文件当中,所以先解析配置文件,


spring源码入门学习 spring源码讲解_spring源码入门学习_13


spring源码入门学习 spring源码讲解_spring源码入门学习_14


spring源码入门学习 spring源码讲解_spring源码深度解析_15


解析完成后,它开始注册bean。

其实源码并不难懂,只要你做好笔记和记好步骤就行,但是如果你需要了解每一步,每一个接口和方法的作用,这个看天赋吧,我还小,我还只是个孩子。