首页 > 其他分享 >Spring学习

Spring学习

时间:2024-01-24 14:48:33浏览次数:29  
标签:容器 Resource Spring 接口 学习 Bean 加载 BeanDefinition

简单Spring代码

1、BeanFactory 和 FactoryBean 和 BeanDefinition

BeanDefinition是Bean的定义。BeanFactory是Bean容器顶层接口。FactoryBean是用来创建Bean的,实现此接口的getBean方法可以通过此FactoryBean的名字获得Bean,如果想获得他本身则要转移&。

2、容器

 

简单容器接口

DefaultListableBeanFactory中有重要成员属性——beanDefinitionMap

Map of bean definition objects, keyed by bean name.

高级容器接口

ApplicationContext继承全部简单容器,AbstractApplicationContext实现了大部分重要内容,其下的容器是大多数时候用的容器。

3、资源访问

3-1 Resource、ResourceLoader

      Resource接口是 Spring 资源访问 策略的抽象。  AbstractResource实现了Resource大部分实现。

      ClassPathResource默认去 编译后文件目录中的 WEB-INF/classes下。

      ResourceLoader 实现不同的Resource加载策略,按需返回特定类型的Resource。

策略模式,Resource下三个策略,通过DefaultResourceLoader getResource方法决定使用那个策略。

PathMatchingResourcePatternResolver 是ResourceLoader的装饰器。支持多配置文件加载 Ant风格。

AbstractApplicationContext  聚合 PathMatchingResourcePatternResolver  继承 DefaultResourceLoader

3-2 使用者BeanDefinitionReader

作用:读取BeanDefinition 并最终 通过BeanDefinitionRegistry 注册到容器。

BeanDefinitionReader定义了一系列加载配置文件成为BeanDefinition的接口

ApplicationContext会视情况使用其中一个加载资源方法 读取配置资源,将读取的内容解析Document对象再解析为bdHolder(BeanDefinition包装类)再解析为BeanDefinition 注册进容器。

AbstractBeanDefinitionReader中实现的loadBeanDefinitions方法会使用ResourceLoader或者ResourcePatternResolver来加载资源。

4、BeanDefinition的注册

BeanDefinitionRegistry中registryBeanDefinition方法将BeanDefinition注册进容器。

所谓注册就是将BeanDefinition放入DefaultListableBeanFactory的成员属性beanDefinitionMap中。

5、PostProcessor、Aware、事件监听器。

5-1 后置处理器

本身也是一种需要注册到容器中的Bean。 其里面的方法会在特定的时间被容器调用。

实现不改变容器或者Bean核心逻辑的情况下,对Bean做扩展。

对Bean进行包装,影响其行为、修改Bean的内容等,甚至替换。

种类:

  容器级别的:BeanDefinitionRegistryPostProcessor、BeanFactoryPostProcessor

  Bean级别的:BeanPostProcessor

    两个方法  Bean初始化之前,和Bean创建之后。

    作用:管理Bean的生命周期:Bean实例化--->Bean初始化--->Bean使用中--->Bean销毁

    相关的接口:

 

 

5-2 Aware

实现相关的接口,可以调用相应的服务。

 

5-3 事件监听机制

事件源 Event Source

事件监听器 Event Listener

事件对象 Event Object

发布事件 ApplicationEventPublisher / ApplicationEventMulticaster

 

 

 

 

 

6、容器初始化

AbstractApplicationContext中的refresh(

 

 

 7、Bean的创建,依赖注入

refresh()->finishBeanFactoryInitialization()->preInstantiateSingletons()->getBean()->doGetBean()->createBean()->doCreateBean()

此过程非常复杂、调用非常深、做了很多很精细的控制,只看大概,理清脉络,大处着眼。

 

 

 

7-1 doGetBean

7-2 doCreateBean

7-3 循环依赖

7-4 doGetBean 之 polulateBean

 

标签:容器,Resource,Spring,接口,学习,Bean,加载,BeanDefinition
From: https://www.cnblogs.com/tyt0o0/p/17983898

相关文章

  • 死磕Spring之IoC篇 - BeanDefinition 的解析过程(面向注解)
    BeanDefinition的解析过程(面向注解)前面的几篇文章对Spring解析XML文件生成BeanDefinition并注册的过程进行了较为详细的分析,这种定义Bean的方式是面向资源(XML)的方式。面向注解定义Bean的方式Spring的处理过程又是如何进行的?本文将会分析Spring是如何将 @Component......
  • Java21 + SpringBoot3整合Redis,使用Lettuce连接池,推荐连接池参数配置,封装Redis操作
    目录前言相关技术简介Redis实现步骤引入maven依赖修改配置文件定义Redis配置类定义Redis服务类,封装Redis常用操作使用Redis服务类总结前言近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展......
  • kafka 学习贴
    为什么要使用Kafka消息队列?解耦、削峰:传统的方式上游发送数据下游需要实时接收,如果上游在某些业务场景:例如上午十点会流量激增至顶峰,那么下游资源可能会扛不住压力。但如果使用消息队列,就可以将消息暂存在消息管道中,下游可以按照自己的速度逐步处理;可扩展:通过横向扩展生产者......
  • 使用Spring Boot实现基于HTTP的API
    SpringBoot是一个用于简化Spring应用程序开发的框架,它提供了一系列的开箱即用的功能,使得快速构建RESTfulWeb服务和基于HTTP的API变得简单。以下是使用SpringBoot实现基于HTTP的API的步骤:1. 添加依赖:在Maven项目中,将SpringBootWebStarter依赖添加到pom.xml文件中。2. java复......
  • SpringCloudAliBaBa Seata学习
    SpringCloudAliBaBa学习服务的注册与发现分布式事务使用场景同一个事务对两个数据库操作,事务肯定是会失效的因为一个事务就是一个数据库连接,不同的连接就是不同的事务Seata是什么?Seata是一款分布式事务解决方案,用AT模式是阿里推荐的事务模式:TCC、SAGA、XA常见分布式事......
  • 寒假怎么制定学习计划高效?可以给自己制定学习计划的软件
    随着寒冬的降临,寒假也随之而至。对于中小学生和大学生们来说,这是一个放松身心、挖掘兴趣、提升学业的黄金时期。然而,众多学子纷纷表示,寒假在家中往往面临太多诱惑,难以按时完成每天的学习目标。那么如何应对这个问题呢?一款智能的学习计划制定软件或许可以成为解决之道。对于那些......
  • scikit-learn.datasets 机器学习库
    scikit-learn是一个用于Python的机器学习库,提供了大量用于数据挖掘和数据分析的工具。以下是对这些函数和方法的简要描述:clear_data_home:清除数据集目录的内容。dump_svmlight_file:将数据集保存为SVMLight格式的文件。fetch_20newsgroups:下载20个新闻组的文本数据集。f......
  • 云计算学习day2
    第二天学习内容为讲解了Linus系统的分区以及命令的含义以及分别有那些命令首先为分区,linus系统的分区为三部分,分别为:/(根)、/boot、swap:/‘第一个文件夹’想进入到linux系统必须要有根,根分区是最重要的分区/boot存放启动引导文件的swap把硬盘上的一部......
  • 某信息安全研究机构:打造创新人才学习平台,增强企业数字化转型内生安全动力
    某信息安全研究机构是该领域具有重要影响力的研究咨询与决策支撑机构,是保障信息安全的重要机构。该信息安全研究机构聚焦安全主业,加强特色智库建设,为经济高质量发展提供智力支持和决策参考。同时,不断强化信息安全综合保障能力、关键软件产业生态促进能力,加强制度建设和合规管理,提高......
  • # WinDbg学习一(入门)
    前言一直在零零散散的摸索WinDbg知识,但是总是不成体系,所以下定决心整理出来。简介WinDbg是一个调试器,可用于分析故障转储、调试实时用户模式和内核模式代码,以及检查CPU寄存器和内存。那么为什么不用VS呢,一个是VS安装在开发环境上,主要用于源码级调试,生产环境调试比较困难,另外......