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源码核心类梳理(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章
Spring源码解析-核心类之XmlBeanDefinitionReader