Java入门到精通——框架篇之Spring源码分析Spring两大核心类
一、Spring核心类概述。
Spring里面有两个最核心的类这是Spring实现最重要的部分。
1、DefaultListableBeanFactory
这个类位于Beans项目下的org.springframework.beans.factory.support包下。
XmlBeanFactory(位于org.springframework.beans.factory.xml包)继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册加载bean的默认实现,而对于XmlBeanFactory与DefaultListableBeanFactory不同的地方是XmlBeanFactory中使用了自定义的XML读取器XmlBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取,DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口。
2、XmlBeanDefinitionReader这个类位于org.springframework.beans.factory.xml包下。
XML配置文件的读取是Spring中重要的功能,因为Spring的大部分功能都是以配置文件作为切入点的。那么我们可以从XmlBeanDefinitionReader中树立一下资源文件读取、解析及注册的功能。
二、两大核心类的层次结构图。
1、DefaultListableBeanFactory
从图中不难发现这个类如何从底层一步一步封装起来的。
下面大致的介绍一下主要几个类的作用:
AliasRegistry:对alias的简单增删改查
SimpleAliasRegistry:主要使用map作为alias的缓存,并对接口AliasRegistry进行实现
SinglegtonBeanRegistry:定义对单例的注册以及获取。
BeanFactory:定义获取Bean及Bean的各种属性。
DefaultSingletonBeanRegistry:对接口SinglegtonBeanRegistry的各个函数的实现。
HiberarchicalBeanFactory:集成BeanFactory,对BeanFactory功能基础上加上了parentFactory的支持。
BeanDefiniRegistry:定义BeanDefinition的各种增删改查操作。
FactoryBeanRegistrySuppourt:在DefaultSingletonBeanRegistry基础上增加了对FactoryBean的特殊处理。
CongfigurableBeanFactory:提供配置Factory的各种方法。
ListableBeanFactory:根据各种条件获取Bean的配置清单。
AbstractBeanFactory:综合了FactoryBeanRegistrySuppourt和CongfigurableBeanFactory的功能。
AutowireCapableBeanFacotry:提供创建bean、自动注入、初始化以及应用bean的后处理器。
AbstractAutowireCapableBeanFactory:综合AbstractBeanFactory并对接口AutowireCapableBeanFactory进行实现
ConfigurableListableBeanFactory:BeanFactory配置清单,指定护绿类型及接口DefaultListableBeanFactory:综合了上面所有功能组要对Bean注册后的处理
2.XmlBeanDefinitionReader
从这个图我们能看出这个类用如何一步一步的封装起来的。
下面我也简单的说一下主要几个的类有些什么功能:
ResourceLoader:定义资源加载器,主要应用于根据给定的资源文件地址返回对应的Resource。
BeanDefinitionRedader:主要定义资源文件读取并且转化为BeanDefinition的各个功能。
DocumentLoder:定义从资源文件加载到转换为Document的功能。
三、总结。
这篇博客对这两个核心类大概的讲述了一下,下面的系列博客会详细的讲述这些类内部是如何实现的。
Java入门到精通——框架篇之Spring源码分析Spring两大核心类的更多相关文章
- spring源码分析系列 (8) FactoryBean工厂类机制
更多文章点击--spring源码分析系列 1.FactoryBean设计目的以及使用 2.FactoryBean工厂类机制运行机制分析 1.FactoryBean设计目的以及使用 FactoryBea ...
- 【Spring源码分析系列】启动component-scan类扫描加载过程
原文地址:http://blog.csdn.net/xieyuooo/article/details/9089441/ 在spring 3.0以上大家都一般会配置一个Servelet,如下所示: &l ...
- spring源码分析系列3:BeanFactory核心容器的研究
目录 @(spring源码分析系列3:核心容器的研究) 在讲容器之前,再明确一下知识点. BeanDefinition是Bean在容器的描述.BeanDefinition与Bean不是一个东西. Be ...
- Java入门到精通——框架篇之Hadoop概述
一.Hadoop来历 Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明了倒排索引算法,通过加入了Map ...
- spring源码阅读(2)核心类介绍
(1).BeanFactory作为一个主接口不继承任何接口,暂且称为一级接口. (2).有3个子接口继承了它,进行功能上的增强.这3个子接口称为二级接口. (3).ConfigurableBeanFa ...
- spring源码分析系列
spring源码分析系列 (1) spring拓展接口BeanFactoryPostProcessor.BeanDefinitionRegistryPostProcessor spring源码分析系列 ...
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步 一.概述 PV操作是对信号量进行的操作. 进程同步是指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消 ...
- spring源码分析之spring-core总结篇
1.spring-core概览 spring-core是spring框架的基石,它为spring框架提供了基础的支持. spring-core从源码上看,分为6个package,分别是asm,cgli ...
- 框架-spring源码分析(一)
框架-spring源码分析(一) 参考: https://www.cnblogs.com/heavenyes/p/3933642.html http://www.cnblogs.com/BINGJJF ...
随机推荐
- update 多表链接
update Aset A.shl = A.shl - B.shl from retmxls A,daysphz Bwhere A.spid = B.spid and A.fdbs = B.fdbs ...
- rest-assured的xmlPath使用方法总结
xmlPath的使用方法跟JsonPath的使用方法相近,下面简单总结一下: 准备xml文件数据: <records> <car name='HSV Maloo' make='Hol ...
- POJ2449 Remmarguts' Date A*算法
题意是让求从st的ed第k短路... 考虑A*算法:先把终点到每个点最短路跑出来(注意要建反图),当做估价函数h(u),然后跑A* 每次取出总代价最小的,即g(u)+h(u)最小的进行扩展,注意如果u ...
- POJ_1733 Parity game 【并查集+离散化】
一.题面 POJ1733 二.分析 该题与之前做过的带权并查集的唯一区别就是数组开不下.所以需要用离散化的思想,只取那些有用的点来解决该问题. 离散化其实就是把这些所有用到的点收集后,去重,再排一下序 ...
- B. Cover Points Codeforces Round #511 (Div. 2)【数学】
题目: There are nn points on the plane, (x1,y1),(x2,y2),…,(xn,yn)(x1,y1),(x2,y2),…,(xn,yn). You need t ...
- POJ - 3764 01字典树+前缀异或和
异或关于前缀的特性:[u,v]=[1,u]^[1,v] 注意是路径,假设1为根,prexor[1]不保留数值 /*H E A D*/ int to[maxn<<1],nxt[maxn< ...
- 网络安全通信https工作原理
HTTPS其实是有两部分组成:HTTP + SSL / TLS, 也就是在HTTP上又加了一层处理加密信息的模块.服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据 1. ...
- pandas to_excel、to_csv的float_format参数设置
df.to_excel(outpath,float_format='%.2f')
- C# 清空数组Array.Clear
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public ...
- cloudemanager安装时出现8475 MainThread agent ERROR Heartbeating to 192.168.30.1:7182 failed问题解决方法(图文详解)
不多说,直接上干货! 问题详情 解决这个问题简单的,是因为有进程占用了.比如 # ps aux | grep super root ? Ss : : /opt/cm-/lib64/cmf/agen ...