Spring源码分析-IOC核心组件

571 阅读1分钟

这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战

前言

ClassPathXmlApplicationContext.png

Spring源码系列

Spring源码分析-IOC基本概念

1.Resource 体系

org.springframework.core.io.Resource,对资源的抽象。它的每一个实现类都代表了一种资源的访问策略,如 ClassPathResource、RLResource、FileSystemResource 等。

Resource.png

2.ResourceLoader 体系

Spring 利用 org.springframework.core.io.ResourceLoader 来进行统一资源加载,主要应用于根据给定的资源文件地址,返回对应的 Resource 。

ResourceLoader.png

3.BeanDefinition 体系

org.springframework.beans.factory.config.BeanDefinition ,用来描述 Spring 中的 Bean 对象。

BeanDefinition.png

4.BeanDefinitionReader 体系

org.springframework.beans.factory.support.BeanDefinitionReader 的作用是读取 Spring 的配置文件的内容,并将其转换成 Ioc 容器内部的数据结构 :BeanDefinition 。

BeanDefinitionReader.png

5.BeanFactory 体系

org.springframework.beans.factory.BeanFactory,是一个非常纯粹的 bean 容器,它是 IoC 必备的数据结构,其中 BeanDefinition 是它的基本结构。BeanFactory 内部维护着一个BeanDefinition map ,并可根据 BeanDefinition 的描述进行 bean 的创建和管理。

BeanFactory.png

public interface BeanFactory {

   String FACTORY_BEAN_PREFIX = "&";

   // 根据 bean的名字,获取在IOC容器中得到bean实例
   Object getBean(String name) throws BeansException;

   // 根据 bean的名字和Class类型来得到 bean实例,增加了类型安全验证机制。
   <T> T getBean(String name, Class<T> requiredType) throws BeansException;

   Object getBean(String name, Object... args) throws BeansException;

   <T> T getBean(Class<T> requiredType) throws BeansException;

   <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
   
   <T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);

   <T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
   
   boolean containsBean(String name);
 
   // 根据 bean名字得到bean实例,并同时判断这个 bean是不是单例
   boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
   
   boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
   
   boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;

   boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;

   @Nullable
   Class<?> getType(String name) throws NoSuchBeanDefinitionException;
  
   @Nullable
   Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;

   String[] getAliases(String name);

}

BeanFactory 有三个重要的子类:

  • ListableBeanFactory:表示这些 Bean是可列表化的
  • HierarchicalBeanFactory:表示的是这些 Bean是有继承关系的
  • AutowireCapableBeanFactory:定义Bean的自动装配规则

类 DefaultListableBeanFactory,它实现了所有的接口。