“闲来静处,且将诗酒猖狂,唱一曲归来未晚,歌一调湖海茫茫。”时间如白驹过隙,匆匆一回眸,便是两周过去,学习spring的过程漫长而孤独,长路漫漫,且行且看。
从小学习的经验告诉我,了解一个东西,需要由表及里,从整体到局部到研究,学习spring我觉得亦是如此。下面是我学习过程中整理的。
一、spring是什么?
首先从官方出发,看看官网给出的描述:
The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.
A key element of Spring is infrastructural support at the application level: Spring focuses on the "plumbing" of enterprise applications so that teams can focus on application-level business logic, without unnecessary ties to specific deployment environments.
这段英文我都能看懂,相信就不需要翻译了,归根结底,spring还是一个工具,让我们使用开发者能够更专注于自己都业务,这样的是把我们从各种配置中释放出来,这也提现了开源的意义,不必造重复的轮子,让我们站在巨人的肩膀上更上一层楼,而不是从地基搭建起。
言归正传,spring的模块大概有22个左右,不过主要模块在于Beans,Core,Context,SpEL,分别对应spring源码中的spring-beans,spring-core,spring-context,spring-expression。
二、Spring模块之前的关系
注意一下:不同的spring模块都可以在源码对应的模块的poject-name.gradle文件中,例如:spring-messaging模块,在src中的spring-messaging.gradle可以看到该模块依赖了哪些模块
学习使用spring的时候,我们都会学到两个很关键的概念依赖注入(DI:Dependency Injection)
和面向切面(AOP:Aspect Oriented Programming)
,依赖注入的实现就在spring-core中,不过不要看spring模块图就以为整个spring架构是一个分层级结构,最下面模块是spring-test,其实这个图主要展现的是spring分为五个大模块:Core Container、Aop、Message、Data Access/Integration、Web、Test,下面这个图是各个模块之间的依赖关系,这两个图结合一下应该能很好的帮助理解spring架构。
Core模块包含:
spring-beans:依赖注入IoC与DI的最基本实现;
spring-core:Bean工厂与bean的装配;
spring-expression:spring表达式语言;
spring-context:spring的context上下文即IoC容器,以类似JNDI注册表的框架式方式访问对象的一种手段。上下文模块从Beans模块继承其功能,并增加对国际化的支持(如使用资源组),事件传播,资源加载和上下文的透明创建,比如Servlet容器。上下文模块也支持JavaEE的功能,诸如EJB,JMX和基本远程调用。ApplicationContext接口是上下文模块的焦点;
spring-context-support:支持常见的第三方库集成到Spring应用程序环境中,特别是缓存(EhCache,JCache)和调度(CommonJ,Quartz)。
spring-context其实是构建在spring-core和spring-beans上的,可以从上图的依赖关系看出来。下图是核心模块的依赖关系图。其中没有标注spring-context-support。
Aop大模块:
spring-aop:面向切面编程;
spring-aspects:集成自AspectJ框架,主要是为SpringAOP提供多种AOP实现方法;
spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器
Message模块:
spring-messaging:包含来自Spring Integration项目(如Message,MessageChannel,MessageHandler)的关键抽象,以及基于消息的应用的基础的其他部分。模块还包含了映射消息到方法的注解集合,类似Spring MVC基于编程方式的注解,主要职责是为Spring框架集成一些基础的报文传送应用。
Data Access/Integration模块:
spring-jdbc:提供了JDBC抽象层,不再需要处理繁杂的JDBC编码以及数据库供应商特定错误码的解析;
spring-tx:支持为实现指定接口的类以及所有POJOs(普通Java对象)的编程和声明式事务管理,简单说来,就是SpringJDBC事务控制实现模块;
spring-orm:为流行的对象关系映射APIs提供集成层,包括JPA和Hibernate。通过spring-orm
模块,你可以将O/R映射框架组合Spring提供的其他功能一起使用,比如前面提及的简单声明式事务管理功能;
spring-oxm:为Object/XML映射实现提供抽象层,诸如JAXB,Castor,JiBX和XStream;
spring-jms:模块(Java消息服务)包含生产和消费消息的功能。从Spring框架4.1版本开始,它提供与spring-messaging
模块的集成
Web模块:
spring-web:基础web功能,如文件上传,以及通过Servlet监听器和面向web的应用上下文初始化IOC容器。同时还包含HTTP客户端和Spring远程支持的web相关部分;
spring-web:为Spring提供了最基础Web支持,主要建立于核心容器之上,通过Servlet或者Listeners来初始化IOC容器,也包含一些与Web相关的支持。
spring-webmvc:众所周知是一个的Web-Servlet模块,实现了SpringMVC(model-view-Controller)的Web应用。
spring-websocket:主要是与Web前端的全双工通讯的协议。(有待考证)
spring-webflux:是一个新的非堵塞函数式ReactiveWeb框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性非常好。
Test模块:
spring-test:支持使用JUnit或TestNG进行Spring组件的单元测试或集成测试。它提供了Spring ApplicationContexts的一致加载和缓存。同时提供用于隔离测试的模拟对象(mock objects)
三、写在后面的话
这都是我收集到到资料,其中有不正确的,欢迎发现的朋友指出,其次,学习中,对spring有个整体的认知,算是正式开始spring之旅,希望接下来坚持下去!!感谢所有收集到的资料的作者,谢谢他们,我学到了很多!!
最后写一句我很喜欢的话,“不悔梦归处,只恨太匆匆”。