aecb00b28f7d55447fcf14f1eebf74b7.png

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

5eafcf7a9598d6974ea225a3884c784e.png

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


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

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

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

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

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

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

a6db99ac5388a02daa235806472fe7fc.png

c5464362ee975ad74329503374debf1d.png

408d1a617122fab86d34dd44d19f8925.png

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

29bf70e6d212c7c8fc59291aa2e4d619.png

7103f2b7861fa9c2340ea3eb32014368.png

cd5acad2e77a64cf99e0337dc4bf9298.png

db7cae73a99d3d347708e16fdb3ca66c.png

558878289840602b8bc10fe4d95515ae.png

点进去:

56e15f23bcb0de8429638ba2a7bdc620.png

至于为什么这么调:

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

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

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

558afd2e23753b6bb6fe57ded81a336b.png

41179b8ab2e7cddd18fcdfaf671aec54.png

b4b82e259ca0b3d68a4188e7fd9c29dc.png

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

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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐