IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> spring源码--02--IOC原理--IOC体系结构 -> 正文阅读

[Java知识库]spring源码--02--IOC原理--IOC体系结构

IOC体系结构

一、BeanFactory

在这里插入图片描述

  1. Spring Bean的创建是工厂模式
  2. 这一系列的Bean工厂(IOC容器)为开发者管理对象间的依赖关系提供了很多便利和基础服务。

1.1、为何要定义这么多层次的接口?

每个接口都有自己的使用场景,它主要是为了区分 对象传递和转化过程中,对对象的数据访问所做的限制。举例如下

1.1.1、ListableBeanFactory 接口

表示这些 Bean 是可列表的

1.1.2、HierarchicalBeanFactory 接口

表示的是这些 Bean 是有继承关系的,也就是每个Bean 有可能有父 Bean。

1.1.3、AutowireCapableBeanFactory 接口

定义 Bean 的自动装配规则。

1.2、BeanFactory功能

  1. 它定义了IOC容器的基本功能规范
  2. BeanFactory 有三个子类
    1. ListableBeanFactory
    2. HierarchicalBeanFactory
    3. AutowireCapableBeanFactory
  3. 最终的默认实现类是:
    1. DefaultListableBeanFactory

1.3、BeanFactory源码


public interface BeanFactory {
    
    // 对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,
    // 如果需要得到工厂本身,需要转义
    String FACTORY_BEAN_PREFIX = "&";
    
    // 根据bean的名字,获取在IOC容器中的bean实例
    Object getBean(String name) throws BeansException;
    
    // 根据bean的名字和Class类型来得到bean实例,增加了类型安全验证机制。
    Object getBean(String name, Class requiredType) throws BeansException;
    
    // 提供对bean的检索,看看是否在IOC容器有这个名字的bean
    boolean containsBean(String name);
    
    // 根据bean名字得到bean实例,并同时判断这个bean是不是单例
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
    
    // 得到bean实例的Class类型
    Class getType(String name) throws NoSuchBeanDefinitionException;
    
    // 得到bean的别名,如果根据别名检索,那么其原名也会被检索出来
    String[] getAliases(String name);
    
} 


1.3.1、BeanFactory设计的目的

  1. 定义了IOC容器的bean的规范,类似于设计模式的模板模式。具体实现由具体的IOC容器去确认。
  2. spring提供了许多IOC容器的实现。比如XmlBeanFactory,ClasspathXmlApplicationContext等。

1.3.2、具体的IOC容器–XmlBeanFactory

  1. 是Spring提供的一个最基本的IOC容器
  2. 可以提供最基本功能。
  3. 可以读取XML文件定义的BeanDefinition(XML文件中对bean的描述)。

1.3.3、具体的IOC容器–ApplicationContext

  1. 是Spring提供的一个高级的IOC容器
  2. 可以提供IOC容器的基本功能
  3. 可以提供以下的附加服务。
    1. 支持信息源,可以实现国际化。(实现MessageSource接口)
    2. 访问资源。(实现ResourcePatternResolver接口)
    3. 支持应用事件。(实现ApplicationEventPublisher接口)

在这里插入图片描述

二、BeanDefinition

在这里插入图片描述

2.1、什么是BeanDefinition

  1. 是bean定义的最终文件,非常详细的描述了bean的信息。
  2. 通过BeanDefinition,我们可以获取bean的所有信息。包括和各个对象的依赖关系

2.2、 Bean 的解析

Bean 的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。所以就有很多bean的解析实现类。比如对xml的解析就通过XmlBeanDefinitionReader来完成。

其实上面的话套用设计模式的规则来讲就是,功能的调用都是使用接口。

2.2.1、XmlBeanDefinitionReader继承关系

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-01 11:32:51  更:2021-11-01 11:32:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:20:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码