Spring IoC学习路线!
Spring IoC容器本质上是一个管理Java对象的工具。
在项目启动时,它会读取开发人员定义的依赖关系,将这些依赖关系缓存到容器内部。
在适当的时机,比如开发人员需要使用某个类对象时,Spring IoC容器会根据依赖关系进行创建对象,设置成员变量,然后将对象返回给开发人员。
在Spring IoC容器中,将上述功能拆分成了以下模块:
BeanFactoryApplicationContext- 读取依赖配置:
AnnotatedBeanDefinitionReader、ClassPathBeanDefinitionScanner和BeanDefinitionReader ResourceEnvironment
通过系统学习这些模块,就可以建立Spring的坚实基础。
后续再深入学习Spring的启动流程、生命周期、作用域等细节,就能够全面掌握Spring的核心功能了。
1 BeanFactory

BeanFactory翻译过来就是bean工厂,通常将Spring容器管理的Java对象叫做bean。
BeanFactory实际上就是Spring IoC容器,它会缓存开发人员定义的依赖关系。
开发人员通过getBean()方法从BeanFactory中获取bean。
BeanFactory在执行getBean()方法时,会根据依赖关系进行创建对象,设置成员变量,然后将对象(bean)返回给开发人员。如果作用域是singleton,还会将bean缓存起来,下次获取时直接返回缓存值。
DefaultListableBeanFactory是BeanFactory的一个默认实现,只要掌握DefaultListableBeanFactory的基本使用、执行原理和相关源码,就可以对Spring IoC容器有深入的理解,打下Spring的坚实基础。
BeanFactory实际上是针对Spring内部开发的底层工具,应用开发人员通常不会跟BeanFactory打交道,接触更多的是ApplicationContext。
ApplicationContext会对BeanFactory进行代理,通常会使用DefaultListableBeanFactory作为bean工厂,所以DefaultListableBeanFactory是十分重要的。
2 AplicationContext

ApplicationContext是对应用层开放的一个模块。
ApplicationContext继承了BeanFactory接口,它的实现类通常会持有DefaultListableBeanFactory成员变量,通过代理设计模式向开发人员提供getBean()等方法。
ApplicationContext除了集成BeanFactory的功能,它提供了从不同形式配置中获取依赖关系和获取环境变量的能力。
例如,AnnotationConfigApplicationContext可以从注解中获取依赖关系,ClassPathXmlApplicationContext和FileSystemXmlApplicationContext可以从xml文件中获取依赖关系。
因此,我们只要掌握上述ApplicationContext实现类,就能够对不同形式的依赖配置,环境变量的读取有深入的理解。
需要注意的是,在日常工作中可能使用的并不是上述实现类。
例如Spring Boot中可能会使用ServletWebServerApplicationContext,但是它们的基本原理都是差不多的。只要我们掌握上述实现类,管他是什么实现类,大概看一下源码就都能很快的掌握。
3 BeanDefinition

BeanDefinition是依赖关系在BeanFactory中的缓存。
在创建bean时,BeanFactory会根据对应的BeanDefinition进行创建对象,设置成员变量。
BeanDefinition定义了依赖关系的各种属性,学习BeanDefinitio可以帮助我们深入理解日常工作中要怎么定义配置依赖关系,也可以深入理解BeanFactory是怎么创建对象,设置成员变量的。
4 AnnotatedBeanDefinitionReader

AnnotatedBeanDefinitionReader会根据类对象读取基本注解信息,并注册该类。
5 ClassPathBeanDefinitionScanner

ClassPathBeanDefinitionScanner会根据给定包路径进行扫描,读取所有注解形式的依赖关系。
6 BeanDefinitionReader

BeanDefinitionReader是读取xml和groovy形式依赖关系的工具,可以将这些配置文件中的依赖关系解析成BeanDefinition,并且缓存到BeanFactory中。
7 Resource

Resource是Spring对资源的一种抽象,用于对资源的统一处理,比如xml文件或类路径都是一种资源。
典型的应用是,ClassPathBeanDefinitionScanner在读取依赖关系时,会将获取类路径的资源进行处理。
8 Environment

Environment表示环境变量,包括系统环境变量、Spring Boot的profile、xxx.properties和xxx.yml。
通常使用的实现类是StandardEnvironment,我们只要掌握了它的源码,对Spring体系的环境变量就有了整体的把握。

浙公网安备 33010602011771号