Spring源码分析【2.Spring架构体系】

Spring的架构体系

spring总共大约有20多个模块,由有1300多个文件组成。而这些组件分别整合在核心容器Core Container,AOP和Instrumentation,Data Access/Integration,Messaging,test,6个模块中如下图在这里插入图片描述

· Data Access/Integration(数据访问层)

1.JDBC 顾名思义数据库连接一系列接口规范没啥花露水 提供JDBCtemplate访问数据库的模板
2.ORM rowMapper对象关系映射
3.OXM O/X映射器 Object与XML的映射,通俗来讲是bean与Xml之间的转换过程(编组和解组),对了 可能你已经想到Spring的xml注入方式了。不过过于繁琐基本上不怎么使用了
4.JMS 这个模块是同JDBC一般,Spring集成简化jms api,JMS 大家可能最熟悉了,send、receive消息(receive是同步式的,会block)这个模块应该不常用(JmsTemplate并不能通吃所有操作,需要one to one配置,博主自己也没用过,甚是繁琐)
5.Transactions Spring的事务管理,数据库的基础基础自带知识吧。

· Web

1.webSocket ws协议支持,与客户端网页通讯机制,内置是tomcat为容器
2.Servlet Http访问
3.Web SpringMvc
4.portlet 页面 (比如jsp)

· Aop

面向切面编程 代理模式的应用 上一章有介绍

· Aspect

切面,引用的是CGLIB库

·Instrumentation

修改类文件的字节码,以达到动态aop的作用

·Messaging

消息模块,集成messaging api和消息协议提供支持

·Core Container

1.beans BOP,Spring bean
2.core 核心实现逻辑
3.context IOC容器
4.SpEL el表达式

·Test

Spring-test 测试模块 Junit

Spring的架构体系依赖关系

在这里插入图片描述
其中struct 4.0中已被排除,因为Spring已有完整的mvc体系(Struct的表达式好像存在bug博主记得),该图是Spring3.X的架构依赖图

Spring源码下载个人仓库
https://github.com/markpop8/spring-framework.git

首先博主建议在攻读spring 源码的时候应该熟悉设计模式

Spring的IOC体系结构

Spring的Bean的创建是典型的工厂模式,在Spring中有许多IOC可供我们选择和使用,关系如下:

在这里插入图片描述

Spring的Factory

我们先看下基础beanFacory接口中常用方法

在这里插入图片描述

BeanFactory: 最底层接口 所有的工厂都是继承自这个接口 ,定义了基本规范
ListableBeanFactory:bean是可列表化的,是由此工厂生产而出
Hierarchical :存在父子关系的bean ,此bean可能有父级
AutowireCapableBeanFactory :自动注入的bean,定义了bean的自动装配规则,一种隐式注入
DefaultListableBeanFactory 最终主要实现类

其他IOC的实现比如XmlBeanFactory,ClasspathXmlApplicationBeanFactory(读取xml的工厂现在基本不用)
了)

我们就说说最基本常见的.ApplicationContext
ApplicationBeanFactory接口提供了IOC容器的基本操作外,还实现了MessageSource接口,实现国际化,访问资源,实现ResourcePatternResolver接口,实现ApplicationEventPublisher接口,支持事件推送

ApplicationContext体系
在这里插入图片描述

通常我们使用的ApplicationContext一般是继承自ConfigurableWebApplicationContext
在这里插入图片描述
这里博主实现了ApplicationContextAware 自动set了此Factory 是用servlet所写的,是Springboot包中的继承关系,这里的工厂好像是有刷新机制,具体会销毁后再去创建DefaultListableBeanFactory

Spring的Factory中的Bean

XML形式
BeanDefinition
bean的定义,bean的规范

如下图规范
在这里插入图片描述
读到注册的BeanDefinition对象后(实际也会保存在容器中),后通过一些列接口去读取注册
在这里插入图片描述
所以 Bean的类型不同是会更具不同类型的工厂去生成的,IOC容器的初始化中包括BeanDefinition的Resource定位,载入 注册三个过程。

不使用XML

通过注解
@Bean
在获取到所有的bean defenition之后,Spring会有一些post process执行,其中一个就是ConfigurationClassPostProcessor, 在这里,Spring会遍历所有的bean definition, 如果发现其中有标记了@Configuration注解的,会对这个类进行CGLIB代码,生成一个代理的类,并且把这个类设置到BeanDefenition的Class属性中。当需要拿到这个bean的实例的时候,会从这个class属性中拿到的Class对象进行反射,那么最终反射出来的是代理增强后的类。

这里拓展一下其实加载Bean 就是以重委托机制 这是Spring很好的思想

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值