关注“码农架构”
专注于高可用、高性能、高并发类技术分享!
Spring的模块化设计和Java 9 的模块化设计不是对等的,不过Spring 的模块化确实可以运用到Java 9 的模块化里面去 ,那是为什么呢,那是因为在Spring 的某个版本开始,它将它的模块划分为更细粒的Jar 包,这些Jar包可以按需应用分配的方式来依次依赖,比如它的核心模块Spring-core,或者Spring-JDBC或者Spring-context这些模块,按照完全统计目前已经有了大概有20多个模块
Spring Framework 中这些模块也是各司其职,然后各取所需的状态,我们在使用Spring Framework 的时候也不一定用到所有模块全部依赖进来,这和它以往最早的版本来说,它的状态是不一样的,最早的时候是把所有的东西放在一起,包括我们所说的interface21
下面是官网的模块截图
下面主要是针对Spring Framework 中的模块做简单的说明「白话讲解说明」
Spring-aopAOP 顾名思义就是面向接口编程Spring-aspects aspects其实就是Spring 对 aspects 的一个支持Spring-beans & Spring-contextSpring-beans和Spring-context都是需要通过Spring-core 来进行支持的,Spring-core 就包含了一些关于Java语法特性的支持 以及林林总总Spring-expression我们常说的就是Spring的表达式语言 ,Spring 表达式语言是从Spring3开始引入,它类似于JSP里面的EL语言(功能也是非常强大,前段时候做公式服务的时候主要核心技术就是利用Spring-expression表达式语言,后续有机会可以开详细介绍)Spring-instrumentspring-instrument 是Spring 2开始对我们Java的装配 ,这个装配简单点讲就是java 的agent的一个支持Spring-jclspring-jcl 是一个新模块,这个模块是从spring5开始支持,那么为什么Spring 要引用这个模块呢?因为我们知道过去运用过另一个模块,叫commons-logging,commons-logging 统一了Java的logging,就是Java 日志和log4j这个日志,那么Java logging后又出现了LogBack,LogBack是一个新型的日志框架,LogBack用到算了SL4J,SL4J就相当于说又把Java Logging和LogBack进行统一,Spring 为了解决这个情况自己研发了 一套新型的日志框架Spring-JcL,Spring-JcL就会帮Spring统一它的日志管理,我们都知道Spring 过去都是通过commons-logging 来进行日志管理这样,Spring 的支持就会依赖外面的API ,由于外部的API不断在变化 ,所以这里采用统一的方式进行处理和维护Spring-JDBCspring-jdbc顾名思义就是spring 对jdbc的一个整合这里就不做过多的阐述Spring-JMSJMS其实就是Java Service Message 的一个缩写,Java 的一个消息服务,这里可以对应的比如说Apache 的 Apache MQ 或者其他传统Java EE 的消息中间件 ,这部分内容只针对我们JMS的规范来进行实施的,因此它会利用到大量的JMS的API来进行实现Spring-messageMessage 模块其实就是Spring 相对消息模块进行统一化管理,那么包括我们所说的JMS包括了 Kafka、RocketMQ、或者RabbitMQ 它都会有一个统一实现的标准,这个message和JMS有些一样,JMS过去就是希望通过统一套标准的API来统一比如说MQ或者是说w blogic MQ或者是websphere MQ的实现,那么Spring 的野心更大,它希望通过它自己的API来帮助大家实现一个最简单或者说最好用的API体验Spring-ormorm就是我们比如Hibernate、JPA这种东西的一个整合,这个应该都比较熟悉Spring-oxmoxm简单讲就是XML的编列 ,也就是说就是说XML的序列化和反序列化,这个是一个新的模块,Spring进行单独维护Spring-test顾名思义就是Spring的一个测试,包含了Mock对象、包括test-context比如测试上下文和test-web测试,因此通常我们引用它来说,比如:Maven里面它的scope就是test scope它就是在测试场景下特殊实现,因此不需要把它引入到你日常开发中去Spring-txtx 是 transtraction的缩写就是我们常说的Spring的事务抽象,这个对于学习Java的码友是重点也是难点的一块,那么Spring的事务抽象一则基本上借鉴了JDBC的事务实现以及Java EE 尤其是 EJB的事务实现做了一个统一的封装(Spring Framework 框架来源是基于它的作者 Rod Johnson 写过一本书就是 开发Java EE without EJB,就是不用EJB来实现 Java EE,里面讲到一个重要特点就是由于事务重现,比如测试性或者可易用性一定要依赖某个容器,所以方便度肯定不高,所以Spring提出一个tx方便我们来使用 )下面4个部分主要是Web部分
web 、webflux、webmvc以及websocket,为什么Web要分为四个模块来进行呈现?其实问题很简单,因为spring 还想做个统一,它想做什么呢!其实在Java EE web实现也有两个实现,一个是传统的Servlet API 实现就是基于底层API接口的实现 ,另外一个方面就是JAX-RS ,什么是JAX-RS 就是Java 标准的注解的方式来驱动开发RESTful服务,Spring也是基础它们基础来开发spring-webmvc和spring-webflux ,所以你会看到Spring-webmvc和Spring-webflux里面的注解和JAX-RS的注解特别像
上面20多个模块 19个模块可以用于我们日常开发一个可用于日常测试使用
总结
通过上面的20个模块的简单分析,我们可以看出Spring目前开始把功能精细化,就是说如果我想需要Spring的某些特性,只需要增加对某个模块的依赖,这些模块可以做到按需分配
关注微信公众号“码农架构”
专注于高可用、高性能、高并发类技术分享!