spring源码学习(一)
让我们以一个spring面试题,开始本系列文章
面试题目:spring的ioc是什么?在45秒内回答最佳
答:没有ioc之前我们创建对象,都是通过new的方式。如果一个类依赖另外一个类,有可能通过在一个类构造方法里面new,也有可能在类外new了之后传进来,无论用哪一种方式都会使得对象的依赖关系和初始化混乱。如果有了ioc,我们可以通过容器对类进行管理,通过声明的方式把这些类通过容器通过反射自动的注入都别的类里面去。用到的技术,xml(对bean进行定义和解析)、反射(才有可能通过容器把bean注入到另外一个bean里面去)、抽象工厂模式。
spring的发展历史
spring 作者: Rod Johnson
· 2002 年Rod主要针对J2EE的繁琐问题发表了《Expert One-on-One J2EE Designand Development》,本书包含3万行代码作为Interface 21 Framework;Jurgen和Yann联系Rod将代码开源,并由Yann提出Spring这个词。
· 2003 年Spring 0.9在Apache 2.0协议下发布,Jurgen和Yann成为Interface 21的创始人,Interface 21也支持AspectJ Project,Thomas Risberg负责Spring JDBC,Ben Alex将Acegi Security的代码送给Rod和Juergen。
· 2004 年 Spring Framework 1.0问世。
· 2005 年Spring Framework达40万下载量。
· 2006 年Spring 2.0发布,Spring超过100万次下载。
· 2007 年Interface 21改名为Spring Source,Spring超过300万次下载。
· 2008 年SpringSource买下g2One公司(Groovy andGrails)。
· 2009 年VMWare收购了SpringSource。
· 2013 年VMWare和EMC创建了Pivotal,Spring移到了Pivotal。年底Spring 4.0发布。
· 2016 年Spring4.3发布。
体系架构概述
发展到现在,spring包含四大模块:
Container(IOC容器、最基础)、AOP、Web、DATA
Container:
spring-Core 、spring-beans 包含了框架的核心实现,包括IOC依懒注入等特性
spring-context 在spring-core 基础上构建它提供一种框架方式访问对象的方法
(Spring-context对core和beans进行封装)
AOP
spring-aop 提供了面向切面编程的丰富支持(程序运行时动态生成代理类,动态代理,java proxy或者cglib)
spring-aspects 提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中,比如Eclipse AJDT。(在编译的时候,把要做切面的代码直接切入到程序字节码里面去,从java源代码编译成class的时候和IDE结合)
instrumentation 提供对javaagent 的支持和类加载器(也是动态代理,通过javaagent的方式)
instrumentation-tomcat 专门针对tomcat 进行类转换与加载管理
WEB
spring-web 提供了基本的面向WEB的功能,多文件上传、使用Servlet监听器的IOC容器初始化。一个面向WEB的应用层上下文
web-mvc: 包含MVC 和rest 服务相关组件
DATA
spring-jdbc: 提供了一个JDBC抽象层
spring-tx: 编程式和声明式事物管理
spring-orm:
spring-oxm:
spring-jms:
spring-redis:
Spring Framework 项目模块
学习spring源码的时候,这么多模块,不可能全部学习完,我们要学习的是设计模式、编程技巧,具体到下面的文章就是IOC和AOP这一块。
spring源码下载和编译
相关资料
spring 项目github 地址
https://github.com/spring-projects
gradle 下载地址
https://services.gradle.org/distributions/gradle-4.2-bin.zip
下载
下载spring fremwork 源码
git clone https://github.com/spring-projects/spring-framework.git
切换到对应分支
git checkout -b v4.3.8 v4.3.8.RELEASE
像这样子,就构建成功啦:
下一篇文章开始分析IOC