本篇向大家介绍本系列demo教程中最后一个知识点就是多模块开发,多模块听着高大上,其实就是依靠maven相互之间的依赖,把多个模块融合进一个项目中而已,说的再直白一些就是像日常开发那样把其他模块导入一个模块,这个模块用来启动并调用所有模块而已。下面通过一个例子整体走一遍模块化开发。
这里先顺便说一个很重要的概念:前后端分离,
在SSM时代,由于是本质上是单体项目,虽然也会使用多模块的形式解耦开发,并实现前后端分离,但是任然在最终会融合成一个war打包部署,且在主流JSP前端的背景下有四种会话域,它们分别是当前页面page、一次请求requset、一次会话session、服务端共享application,除了page是所有的,甚至是现在也在沿用的东西之外,因为它其实就是当前页面获取不同对象数据,严格来讲不能称之为会话域,或者是叫做所有web技术最基础的会话域基石也可以。
其他的session等三种在Springboot时代开始时候,就需要分不同情况而定了,因为Springboot是彻底的实现了前后端分离,使得不用其他策略干涉之下,用户对于服务端来讲每次都是前端模块发出的一次访问接口的请求而已,不再有会话的概念,当然,这三种会话技术并没有从技术上删除,因为Springboot任然支持单体项目的开发,只是默认不装载前端引擎需要人为导入构建而已。由此对于前端来讲数据的使用,就脱离了后端,完全使用了前端自己的技术,比如想要保存数据,前端只有会话域和永久域,会话域终止一次浏览器访问网站,关闭浏览器销毁,而永久域始终保存在浏览器的缓存中,当然也可以自定义实现缓存类,这也是现在常用的手段,这里不做深入扩展,去查其他资料
那么言归正传,仍然需要会话域这一概念时,又该怎么办?市场上主流有两种方向,一种是springboot提供的共享session,但是直接使用的话相当难用,所以普遍采用的是第二种,也就是基于内存技术另行维护会话数据,比如redis或者是国内出的keyval。
第一步:建立父工程,注意
通常情况下,父工程是一个spring initializr模式下创建出来的,但同样存在少量的人会先创建maven在转换成spring boot项目,这个其实就是手动添加所有依赖而已,那种方便用就用那种。
父模块任何环境依赖都不要,只需要指定springboot版本就行
建好的项目结构默认是下面这个样子
我们需要把父项目里,写代码的资源目录删掉,当然,如果看其他的不顺眼你也可以一起删掉,原则上保留.idea、.mvn、父项目的pom
文件即可。
父项目的pom中查看是否指定了pom打包方式
<packaging>pom</packaging>
第二步:建立子项目为模块,我们总共创建三个子模块,commons
为公共模块,service
为Service功能模块,web
为Controller功能以及启动模块,因此在依赖关系上组成web依赖于service,service依赖commons
在父项目名上右键单击创建module
子模块创建的时候,你要注意使用maven模式还是spring initializr,因为如果用spring initializr创建的是一个完整相对独立的springboot项目,它的父子关系、jar依赖以及作为子模块有一些东西是不需要的这些你都要自己操作,而maven创建就比较方便
我们先创建一个普通的maven项目为commons模块,maven项目创建时可以直接选择父工程
commons是一个公共包它不需要任何的支持,所以它的项目结构很简洁
下面我们创建service模块,同样也是一个普通的maven项目,当然如果你觉得有必要可以创建一个springboot项目
最后是web模块,由于web模块还负责启动项目的功能,因此我们要用spring initializr创建一个相对完整的springboot项目,应当注意有的时候,会发生一个小概率问题,就是由于操作问题,在创建好springboot框架的子模块后,该模块缺少springboot的上下文配置,直观的表现为配置文件无提示,并且代码源为灰色普通目录,这种情况右键代码源路径把它设置成代码源就行,而配置文件识别见知识点8,在设置配置文件的时候最好关注一下springboot的Web环境是否正常
web模块需要web环境的支持
由于不是maven创建,所以需要手动维护父子项目关系,在web模块pom中修改parent
标签为父项目
<parent>
<artifactId>boot-par</artifactId>
<groupId>com.wy</groupId>
<version>0.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
web模块的pom文件中还要依赖service模块
<dependency>
<groupId>com.wy</groupId>
<artifactId>boot-service</artifactId>
<version>0.1</version>
</dependency>
service模块要依赖commons模块,也就是说我们要在service模块的pom中添加commons的依赖。
<dependency>
<groupId</