首页 > 其他分享 >Spring IoC学习路线!!!

Spring IoC学习路线!!!

时间:2023-01-10 22:11:40浏览次数:37  
标签:ApplicationContext 依赖 开发人员 Spring BeanFactory 路线 bean IoC

Spring IoC容器本质上是一个管理Java对象的工具。

在项目启动时,它会读取开发人员定义的依赖关系,将这些依赖关系缓存到容器内部。

在适当的时机,比如开发人员需要使用某个类对象时,Spring IoC容器会根据依赖关系进行创建对象,设置成员变量,然后将对象返回给开发人员。

在Spring IoC容器中,将上述功能拆分成了以下模块:

  1. BeanFactory
  2. ApplicationContext
  3. 读取依赖配置:AnnotatedBeanDefinitionReaderClassPathBeanDefinitionScannerBeanDefinitionReader
  4. Environment

通过系统学习这些模块,就可以建立Spring的坚实基础。

后续再深入学习Spring的启动流程、生命周期、作用域等细节,就能够全面掌握Spring的核心功能了。

1 BeanFactory

BeanFactory翻译过来就是bean工厂,通常将Spring容器管理的Java对象叫做bean

BeanFactory实际上就是Spring IoC容器,它会缓存开发人员定义的依赖关系。

开发人员通过getBean()方法从BeanFactory中获取bean

BeanFactory在执行getBean()方法时,会根据依赖关系进行创建对象,设置成员变量,然后将对象(bean)返回给开发人员。如果作用域是singleton,还会将bean缓存起来,下次获取时直接返回缓存值。

DefaultListableBeanFactoryBeanFactory的一个默认实现,只要掌握DefaultListableBeanFactory的基本使用、执行原理和相关源码,就可以对Spring IoC容器有深入的理解,打下Spring的坚实基础。

BeanFactory实际上是针对Spring内部开发的底层工具,应用开发人员通常不会跟BeanFactory打交道,接触更多的是ApplicationContext

ApplicationContext会对BeanFactory进行代理,通常会使用DefaultListableBeanFactory作为bean工厂,所以DefaultListableBeanFactory是十分重要的。

2 AplicationContext

ApplicationContext是对应用层开放的一个模块。

ApplicationContext继承了BeanFactory接口,它的实现类通常会持有DefaultListableBeanFactory成员变量,通过代理设计模式向开发人员提供getBean()等方法。

ApplicationContext除了集成BeanFactory的功能,它提供了从不同形式配置中获取依赖关系和获取环境变量的能力。

例如,AnnotationConfigApplicationContext可以从注解中获取依赖关系,ClassPathXmlApplicationContextFileSystemXmlApplicationContext可以从xml文件中获取依赖关系。

因此,我们只要掌握上述ApplicationContext实现类,就能够对不同形式的依赖配置,环境变量的读取有深入的理解。

需要注意的是,在日常工作中可能使用的并不是上述实现类。

例如Spring Boot中可能会使用ServletWebServerApplicationContext,但是它们的基本原理都是差不多的。只要我们掌握上述实现类,管他是什么实现类,大概看一下源码就都能很快的掌握。

3 BeanDefinition

BeanDefinition是依赖关系在BeanFactory中的缓存。

在创建bean时,BeanFactory会根据对应的BeanDefinition进行创建对象,设置成员变量。

BeanDefinition定义了依赖关系的各种属性,学习BeanDefinitio可以帮助我们深入理解日常工作中要怎么定义配置依赖关系,也可以深入理解BeanFactory是怎么创建对象,设置成员变量的。

4 AnnotatedBeanDefinitionReader

AnnotatedBeanDefinitionReader会根据类对象读取注解形式的依赖关系。

例如,给定一个@Configuration标注的类对象,它可以从该类对象为入口,读取所有相关的依赖关系。

5 ClassPathBeanDefinitionScanner

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

6 BeanDefinitionReader

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

7 Environment

Environment表示环境变量,包括系统环境变量、Spring Boot的profile、xxx.propertiesxxx.yml

通常使用的实现类是StandardEnvironment,我们只要掌握了它的源码,对Spring体系的环境变量就有了整体的把握。

标签:ApplicationContext,依赖,开发人员,Spring,BeanFactory,路线,bean,IoC
From: https://www.cnblogs.com/Xianhuii/p/17041510.html

相关文章

  • SpringDataJPA 程序未配置乐观锁的情况下,报了乐观锁异常
    目录问题原因复现附:报错日志问题报错日志:详见文章结尾附:报错日志程序ORM框架使用的SpringDataJPA,程序中未配置@Version或者@OptimisticLocking注解,但是报了一个乐观......
  • Java(SpringBoot)项目打包(构建)成`Docker`镜像的几种方式
    前置说明最为原始的打包方式spring-boot-maven-plugin插件jib-maven-plugin插件dockerfle-maven-plugin插件最为原始的方式也就是使用Docker的打包命令去打包,麻......
  • SpringBoot-04-thymeleaf模板
    目录前言一、什么是模板引擎?二、引入thymeleaf依赖三、thymeleaf语法1.基础功能:传值取值2.转义字符串为标签3.for-each遍历功能前言参考自:https://www.cnblogs.com/hell......
  • 【转】pageOffice插件 springboot实现服务器上Word文档在线打开编辑保存
    pageOffice插件springboot实现服务器上Word文档在线打开编辑保存需求:在oa系统上,想实现在线,服务器上doc,docx文档,在web打开,编辑。编辑后,可以再同步保存到服务器端。开发......
  • Springboot:拦截器和过滤器
    项目的开发中,在某些情况下,我们需要对客户端发出的请求进行拦截,常用的API拦截方式有Fliter,Interceptor,ControllerAdvice以及Aspect。请求从Filter-->>Controller的过程中,只......
  • Springboot .properties或.yml配置文件读取pom.xml文件值
    需要在pom.xml中打开过滤才可以<build><resources><resource><directory>src/main/resources</directory><fi......
  • springboot启动报错
    前言​ 学习构建springboot+maven项目,在父模块下创建的一个新的模块,依赖版本由父模块pom.xml控制;写了一个测试接口,启动测试时,一直报错,初始化失败、datasource创建失败、......
  • springboot集成dubbo
    使用SpringBoot+Dubbo搭建一个简单分布式服务实战之前,先来看几个重要的概念什么是分布式?什么是Duboo?Dubbo架构什么是RPC?为什么要用Dubbo?开始实战1:zoo......
  • spring boot 设置跨域访问(2)
    1.CorsConfig.javapackagecom.example.demo.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Config......
  • springboot_yaml与properties区别
    application.properties##springboot这个配置文件可以配置什么的东西呢?##第一种:背官方的配置,呜呜呜太多了##然后,官方推荐视图.yaml代替.properties#key=value,......