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继承关系

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值