Spring笔记

来源:互联网 发布:光子计算机 知乎 编辑:程序博客网 时间:2024/06/06 06:47

一、sping-beans工程核心类

1、DefaultListableBeanFactory:

DefaultListableBeanFactory是整个bean加载的核心部分,是spring注册及加载的默认实现,对于XmlBeanFactory对DefaultListableBeanFactory类进行了扩展,从xml文档读取BeanDefinition,对于注册或者获取bean都是从父类继承的,唯独增加了XmlBeanDefinitionReader类型的reader属性,在XmlBeanFactory中主要使用reader属性对资源文件进行读取和注册。

以下的是DefaultListableBeanFactory的继承关系图:


2、XmlBeanFactory:

XmlBeanFactory继承DefaultListableBeanFactory类,从xml文档读取BeanDefinition,注册或者获取bean都是从父类DefaultListableBeanFactory继承的,唯独增加了XmlBeanDefinitionReader类型的reader属性,在XmlBeanFactory中主要使用reader属性对资源文件进行读取和注册。

private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);


3、XmlBeanDefinitionReader

资源文件读取,解析及注册的相关类图

主要包括以下几步的处理:

1)通过AbstractBeanDefinitionReader中的方法,来使用ResourceLoader将资源文件路径转换为对应的Resource

2)通过DocumentLoader对Resource文件进行转换,将Resource文件转换为Document文件。
3)通过实现接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader类对Document进行解析,并使用BeanDefinitionParserDelegate对Element进行解析



4、容器的基础

BeanFactory bf=new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml"));

java中资源文件的读取:将不同来源的资源抽象成URL,通过注册不同的handler来处理不同的资源读取逻辑,一般

handler的类型使用不同的前缀来识别。如:fle:,http:,jar:

1)spring对其内部使用到的资源实现了自己的抽象结构:Resource接口来封装底层资源,对于不同来源文件都有相应的Resource实现:文件(FileSystemResource),URL资源(URLSource)

Resource接口继承InputStreamSource接口,InputStreamSource中有抽象方法getInputStream();

Resource resource=new ClassPathResource("beanFactoryTest.xml");

InputStream inputStream=resource.getInputStream();

getInputStream是通过class或者classLoader提供的底层方法getResourceAsStream实现的

public InputStream getResourceAsStream(String name) {    URL url = getResource(name);    try {        return url != null ? url.openStream() : null;    } catch (IOException e) {        return null;    }}


2)XmlBeanFactory

0 0
原创粉丝点击