spring framework IoC 容器接口体系结构概述

news2024/11/24 19:07:00

目录

  • BeanFactory体系结构
    • BeanFactory 主要接口,可分为三级:
    • BeanFactory 主要实现类:
    • BeanFactory 相关接口和实现类:
    • 主要知识点
  • ApplicationContext体系结构
    • ApplicationContext 主要接口,可分为三级:
    • 二级接口主要实现类(非web):
    • 三级接口主要实现类(web):
    • 主要知识点:

org.springframework.beans 和 org.springframework.context 包是 Spring Framework 的 IoC 容器的基础。
这里需掌握两个体系结构,BeanFactory 和 ApplicationContext。

BeanFactory体系结构

在这里插入图片描述

BeanFactory 主要接口,可分为三级:

  1. BeanFactory 是顶层容器,定义了所有 IoC 容器 必须遵从的原则,定义获取 bean 及 bean 的provider、类型、别名等信息 ;
  2. 有3个子接口继承了它,进行不同功能上的增强,为二级接口;
  • HierarchicalBeanFactory:父子层次容器,增加了对 parentFactory 的 支持
  • AutowireCapableBeanFactory:自动装配bean容器,提供创建 bean、自动注入、初始化以及应用 bean 的后处理器,为第三方框架赋能
  • ListableBeanFactory:可枚举bean容器,根据各种条件获取 bean 的配置清单
  1. 三级接口是对二级接口的综合
  • ConfigurableBeanFactory:复杂配置的容器,提供配置 Factory 的各种方法
  • ConfigurableListableBeanFactory:完整功能的容器

BeanFactory 主要实现类:

  • AbstractBeanFactory:抽象工厂类,主要提供了这样的三个功能: 别名管理,单例创建与注册,工厂方法FactoryBean支持;
  • AbstractAutowireCapableBeanFactory:抽象工厂类,主要功能是bean的创建;
  • DefaultListableBeanFactory:具备全部功能的BeanFactory的默认实现,AbstractApplicationContext#refresh()方法中创建的容器类型。

BeanFactory 相关接口和实现类:

  • SingletonBeanRegistry:定义对单例的注册及获取
  • AliasRegistrγ:定义对 alias 的简单增删改等操作
  • BeanDefinitionRegistry:定义对 BeanDefinition 的各种增删改操作
  • SimpleAliasRegistry:主要使用 map 作为 alias 的缓存,并对接口 AliasRegistry 进行 实现
  • DefauItSingletonBeanRegistry:对接口 SingletonBeanRegistry各函数的实现
  • FactoryBeanRegistrySupport:在 DefaultSingletonBeanRegistry 基础上增加了对 FactoryBean 的特殊处理功能

主要知识点

在上述内容中,涉及的知识点主要有:bean的加载过程(生命周期),自动装配,bean的循环依赖(三级缓存),BeanFactory和FactoryBean的区别。

ApplicationContext体系结构

ApplicationContext的接口及实现主要分两条线,非web的和web的,如下图所示
在这里插入图片描述

ApplicationContext 主要接口,可分为三级:

  1. 一级接口:ApplicationContext
  • EnvironmentCapable:可配置Environment
  • ListableBeanFactory:前面有介绍:可将Bean逐一列出的工厂
  • HierarchicalBeanFactory:前面有介绍:分层的工厂
  • MessageSource:可管理message实现国际化等功能
  • ApplicationEventPublisher:可publish事件,调用Listener
  • ResourcePatternResolver:加载pattern指定的资源
  1. 二级接口:WebApplicationContext、ConfigurableApplicationContext
  • WebApplicationContext:web环境的Context
  • ConfigurableApplicationContext:可配置的应用上下文
  1. 三级接口:ConfigurableWebApplicationContext
    并没有定义太多的操作,主要是Servlet上下文及配置文件。

二级接口主要实现类(非web):

  1. AbstractApplicationContext:实现了该接口的大部分功能;
  2. AbstractRefreshableApplicationContext和GenericApplicationContext
    • GenericApplicationContext 通用的应用上下文(请注意:它已经不是抽象类,可以直接使用了)
    • AbstractRefreshableApplicationContext:实现了父类的方法refreshBeanFactory(),执行BeanFactory的“刷新”。
  3. AbstractRefreshableConfigApplicationContext:这里它有两个比较典型的实现类:
    • FileSystemXmlApplicationContext:taking the context definition files from the file system or from URLs
    • ClassPathXmlApplicationContext:taking the context definition files from the class path

三级接口主要实现类(web):

  1. 抽象实现类:AbstractRefreshableWebApplicationContext
  2. 实现类:
    • XmlWebApplicationContext
    • GroovyWebApplicationContext
    • AnnotationConfigWebApplicationContext

主要知识点:

在上述内容中,涉及的知识点主要有:refresh 方法,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[kerberos] kerberos 认证详解

什么是kerberos认证? kerberos 认证是一种用于验证通信双方身份的网络协议。即帮助客户端和服务端证明 我是我自己 ,从而使得通信双方可以完全信任对方身份 kerberos 角色组成? 客户端(client):发送请求的…

macOS/Linux如何开机自动挂载/卸载磁盘

不管是Linux还是基于Unix的macOS,挂载磁盘可以使用mount命令进行磁盘的挂载。 挂载的一般状态: 查看磁盘状态挂载磁盘读写磁盘 最后是卸载磁盘。 macOS和Windows类似,移动存储一般会自动挂载;部分Linux发行版本,也…

数据结构与算法(Java版) | 关于以上几个经典算法面试题的一个小结

为了让大家明白算法的重要性,以上我就举了几个经典的算法面试题,我的目的也很简单,就是希望引起大家对算法的一个兴趣。 之所以在正式讲解数据结构与算法之前引出这几个经典的算法面试题,是因为我想告诉大家如下三点。 算法非常…

一文看懂MySQL的explian执行计划

表: 数据: 例如:explain select * from t where a 2; 各个字段解释: select_type 表示查询中每个 select 子句的类型(简单 OR 复杂) type 对表的访问方式,表示 MySQL 在表中找到所需行的方式…

[DT框架使用教程01]如何在DT框架中创建插件

[DT框架使用教程01]如何在DT框架中创建插件 DT框架代码地址: https://github.com/huifeng-kooboo/DT 由于国内访问速度的问题 也可以访问gitee的地址: https://gitee.com/huifeng_github/DT DT框架是基于QT框架衍生出的组件化框架。 对于想具体了解DT框架的同学&…

GO语言基础介绍

go语言的GMP模型(协程并发模型),P是go语言本身内部实现的调度器,它是基于协程队列的,协程在调度器面前就类似一个个独立的任务;P一般数量上是处理器内核数。Process本身有调度和创建M的能力,它会…

Web3中文|迪士尼前任CEO回归,能否带领迪士尼开辟web3之路?

据国外媒体报道,11 月 21 日,当地时间周日晚间,迪士尼宣布首席执行官(CEO)鲍勃 查佩克(Bob Chapek)离职,而其前任鲍勃 伊格尔(Bob Iger)将重返迪士尼CEO一职…

Navicat 16 和表空间 - Part 2

如何运作 "What is it? Its it" - Epic, Faith No More 欢迎回到这个关于在 Navicat 16 中使用表空间的系列。第 1 部分介绍了表空间的一些优点,包括可恢复性、轻易添加更多表、自动存储管理以及在隔离缓冲池中数据以提高性能或内存利用率。而第二部分…

Spring boot 3 GraalVM Native Image

Spring boot 3 && GraalVM Native Image 什么是 GraalVM? GraalVM is a high-performance JDK designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Python, and a numb…

Seata模式-tcc

Seata模式目录概述需求:设计思路实现思路分析1.tcc模式2.一阶段 prepare 行为参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,c…

qiankun 部署微前端-vue2 (二)

对于基本的部署问题,也可以去官网查找答案: 常见问题 - qiankun 这里主要记录在部署过程中遇到的问题 一、路由权限问题 无论主应用路由还是子应用中的路由,都会涉及权限问题,并不是每个路由路径对任何角色都是可见&#xff0…

Linux学习-83-MySQL安装过程

17.12 MySQL安装 作为LAMP架构的后端,是一款流行的开源关系数据库系统。在企业网站、业务系统等应用中,各种账户信息、产品信息,客户资料、业务数据等都可以存储到MySQL数据库,其他程序可以通过SQL语句来查询,更改这些…

〖产品思维训练白宝书 - 产品思维认知篇①〗- 产品思维能够为我们带来多大的价值?

大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 &#x1f4e…

算法竞赛入门【码蹄集进阶塔335题】(MT2026-2050)

算法竞赛入门【码蹄集进阶塔335题】(MT2026-2050) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2026-2050)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2026 二维坐标点移动2. MT2027 一秒成零3. MT2028 小…

开关量转4G模块直接阿里云操作介绍

开关量转4G模块直接阿里云操作介绍首先,设备接入阿里云阿里云的连接 同上,配置阿里云平台参数前,和华为云一样,首先要在阿里云控制台创建产品,添加设备获取设备证书 上云流程:创建产品--添加设备--获取证书…

USACO简介

USACO是美国信息学奥赛官网,网站为:USACO 其中还包括USACO TRAINING题目,这是一个可以做练习的网站,网站为USACO Training Gateway 进入USACO网站,我们可以看到以下图片 下来简要说一下关于USACO的注意事项 1.USACO…

python-(6-5-3)爬虫---处理防盗链获取视频

文章目录一 需求二 分析1 拿到contId2 拿到video_status返回的json -----> src Url3 对src Url 进行修整4 下载资源三 代码一 需求 想要获得某处的视频资源,但由于防盗链的存在,使得在使用浏览器的开发页面获得的视频地址与我们实际获取的地址产生差…

Spring源码深度解析十四:@Aspect方式的AOP上篇 - @EnableAspectJAutoProxy

一、前言 文章目录:Spring源码深度解析:文章目录 二、简介 Aop 即面向切面编程,而 Aspect 是Aop 思想的一种实现。 并不是所有的AOP框架都相同,它们在连接点模型上可能有强弱之分,有些允许在字段修饰符级别的应用通…

分享a股下单接口执行买入操作的流程代码

用户在使用a股下单接口&#xff0c;能够得到更多更准确的信息&#xff0c;让用户在股市当中&#xff0c;操作起来更加便捷和有效&#xff0c;对股市市场行情动向判断更加的准确一些。 下面看一下a股下单接口是如何执行买入操作的功能&#xff1a; std::cout << " …

小程序批发订货怎么做

小程序订货系统 批发订货是每个生产企业都不少不了的一个环节&#xff0c;伴随着信息化技术的不断更新&#xff0c;传统的订货方式已经不能满足生产企业的需求了&#xff0c;而鲜桥小程序订货系统基于微信生态&#xff0c;让你即买即用&#xff0c;轻松告别传统的订货方式&…