Spring源码核心类梳理(持续更新)

Posted 泡^泡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring源码核心类梳理(持续更新)相关的知识,希望对你有一定的参考价值。

BeanDefinitionReader

BeanDefinitionReader的作用是读取Spring配置文件中的内容,将其转换为 IoC 容器内部的数据结构:BeanDefinition。

  • XmlBeanDefinitionReader:读取 XML 文件定义的 BeanDefinition。
  • GroovyBeanDefinitionReader:读取 Groovy 语言定义的 Bean。
  • PropertiesBeanDefinitionReader:可以从属性文件,Resource,Property 对象等读取 BeanDefinition。

Resource

  • FileSystemResource:文件系统资源,资源以文件系统路径的方式表示。
  • ByteArrayResource:字节数组资源,若需要操作描述一个字节数组,可以用这个资源类。
    - InputStreamResource:输入流资源,是一个不可变InputStream的包装和一个不可变的描述字符串。
  • ClassPathResource:类路径(相对路径)资源,资源以相对于类路径的方式表示。
  • UrlResource:Url资源,封装了可以以URL表示的各种资源。
  • PathResource:Spring4.0提供的读取资源文件的新类。

ResourceLoader

ResourceLoader 了一个强大的资源加载机制,他可以通过前缀标识加载资源,如:classpath:, file:,ftp等,ResourceLoader用来返回Resource实例。

public interface ResourceLoader 
    Resource getResource(String location);

BeanDefinition

Spring IOC 容器管理了我们定义的各种 Bean 对象及其他们相互的关系,Bean 对象在 Spring 实现中是以 BeanDefinition 来描述的,BeanDefinition 对象相当于Java中的一个模板,不管什么对象都会转化为BeanDefinition。

ApplicationContext

ApplicationContext 是 Spring 提供的一个高级的 IOC 容器,它除了能够提供 IOC 容器的基本功能外,还为用户提供了以下的附加服务。比如:AOP、资源管理、国际化、事件、Environment抽象等。

  • ClassPathXmlApplicationContext:类路径加载。
  • FileSystemXmlApplicationContext:文件系统路径加载。
ApplicationContext ac = new ClassPathXmlApplicationContext("com/zzm/context/beans.xml");//等同路径:"classpath:com/zzm/context/beans.xml"
ac.getBean("abc",abc.calss);//就可以获得bean了

ApplicationContext ac = new FileSystemXmlApplicationContext("com/zzm/context/beans.xml");//等同路径:"file:com/zzm/context/beans.xml"
ac.getBean("abc",abc.calss);//就可以获得bean了
  • AnnotationConfigApplicationContext:用于基于注解的配置。
@Coniguration
public class Beans
    @Bean(name="person")
    public Person person()
    Person person = new Person();
    person.setName("小张");
    
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Beans.class);
Person person = applicationContext .getBean("person",Person.class);
  • WebApplicationContext:专门为web应用准备的,从相对于Web根目录的路径中装载配置文件完成初始化。

BeanWrapper

BeanWrapper是对Bean的包装,其接口中所定义的功能很简单包括设置获取被包装的对象,获取被包装bean的属性描述器,由于BeanWrapper接口是PropertyAccessor的子接口,因此其也可以设置以及访问被包装对象的属性值。BeanWrapper大部分情况下是在spring ioc内部进行使用,通过BeanWrapper,spring ioc容器可以用统一的方式来访问bean的属性。用户很少需要直接使用BeanWrapper进行编程。

BeanFactory

BeanFactory 作为最顶层的一个接口类,它定义了 IOC 容器的基本功能规范。BeanFactory 有三个重要的子类:ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory。例如 ListableBeanFactory 接口表示这些 Bean 是可列表化的,而 HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个 Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。这三个接口共同定义了 Bean 的集合、Bean 之间的关系、以及 Bean 行为。

HierarchicalBeanFactory

HierarchicalBeanFactory接口是在继承BeanFactory的基础上,实现BeanFactory的父子关系。

ListableBeanFactory

ListableBeanFactory接口是在继承BeanFactory的基础上,实现Bean的list集合操作功能。

AutowireCapableBeanFactory

AutowireCapableBeanFactory接口是在继承BeanFactory的基础上,实现Bean的自动装配功能。

ConfigurableBeanFactory

ConfigurableBeanFactory接口是在继承HierarchicalBeanFactory的基础上,实现BeanFactory的全部配置管理功能。

SingletonBeanRegistry

SingletonBeanRegistry是单例bean的注册接口。

ConfigurableListableBeanFactory

ConfigurableListableBeanFactory接口是继承AutowireCapableBeanFactory,ListableBeanFactory,ConfigurableBeanFactory三个接口的一个综合接口。

DefaultListableBeanFactory

DefaultListableBeanFactory实现接口 ConfigurableListableBeanFactory、BeanDefinitionRegistry(bean定义的注册接口),并继承AbstractAutowireCapableBeanFactory,实现全部类管理的功能。

以上是关于Spring源码核心类梳理(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot核心技术梳理(持续更新)

Spring源码解析-核心类之XmlBeanDefinitionReader

react native 0.50 源码解析 再出发 持续更新

iOS面试问题全面梳理 --持续更新

spring核心面试技术(持续更新)

Java线程池底层源码分享和相关面试题(持续更新)