一、Spring Boot多模块项目简介
在当今软件开发中,多模块项目已经变得越来越流行。在Spring Boot框架中,我们同样可以使用多模块来构建我们的项目。Spring Boot多模块项目可以帮助我们更好地实现项目的分层管理和提高代码的可维护性。下面将从几个方面详细介绍Spring Boot多模块项目的搭建和使用。
二、创建Spring Boot多模块项目
在开始之前,我们先来了解一下如何创建Spring Boot多模块项目。首先,我们需要使用Spring Initializr
来快速创建一个Spring Boot父工程,具体步骤如下:
- 打开
https://start.spring.io/
,输入项目信息,包括项目名称、项目版本号等。 - 选择
Project Metada
选项卡,输入项目的元数据,包括Group
、Artifact
、Name
、Description
等信息。 - 选择需要的依赖,例如Web、JPA、Thymeleaf等。
- 点击
Generate
按钮,下载生成的项目压缩包。
解压压缩包,在解压后的目录下使用mvn clean package
命令编译项目。
三、Spring Boot多模块项目的结构
Spring Boot多模块项目的结构通常会有一个父模块和多个子模块。下面我们来看一下标准的Spring Boot多模块项目的结构:
├── parent │ ├── pom.xml │ ├── common │ │ ├── pom.xml │ ├── service │ │ ├── pom.xml │ ├── web │ │ ├── pom.xml
在这个结构中,parent
是父模块,common
、service
、web
都是子模块。在实际项目中,还可以根据需要增加其他子模块。
四、Spring Boot多模块项目的搭建
1. 创建父模块
创建一个Spring Boot多模块项目的第一步是创建父模块。在父模块的pom.xml
文件中,我们需要指定Spring Boot的父依赖和一些常用的依赖版本,如下所示:
<groupId>com.example</groupId> <artifactId>parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.2</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>11</java.version> </properties> <dependencies> <!-- Add your dependencies here --> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <modules> <module>common</module> <module>service</module> <module>web</module> </modules>
在这段pom.xml
文件中,<parent>
元素指定了Spring Boot父依赖,<properties>
元素指定了依赖版本,<dependencies>
元素可以添加项目所需要的其他依赖,例如数据库、缓存等。然后最重要的是<build>
元素,这里定义了构建Spring Boot项目所使用的插件,例如spring-boot-maven-plugin
。
2. 创建子模块
接下来,我们需要创建三个子模块:common
、service
、web
。每个子模块都应该包含一个pom.xml
文件,定义了子模块所需要的依赖和构建配置。下面是common
子模块的pom.xml
示例:
<parent> <groupId>com.example</groupId> <artifactId>parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>common</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> </dependencies>
在这个示例中,<parent>
元素引用了父模块的pom.xml
文件,<dependencies>
元素定义了common
模块所需要的依赖,包括Spring Boot的基础依赖和Jackson的依赖。
五、Spring Boot多模块项目的实战
1. 创建通用模块
在我们的多模块项目中,我们可以使用一个通用模块来存放一些共用的代码和配置,例如常量、工具类、拦截器等。在这个示例中,我们创建一个common
子模块来存放一些共用的代码和配置。
首先,我们在common
子模块中创建一个MyConstants
类,并在其中定义一些常量,如下所示:
public class MyConstants { public static final String DATE_FORMAT = "yyyy-MM-dd"; }
然后,我们创建一个MyInterceptor
类,继承自HandlerInterceptorAdapter
,并在其中实现拦截器逻辑,如下所示:
public class MyInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在这里实现拦截器逻辑 return true; } }
在common
子模块的resources
目录下,我们创建一个application.yml
文件,并在其中添加以下内容:
my: date-format: yyyy-MM-dd
这个文件中定义了一个date-format
配置项。
现在,我们已经在common
子模块中创建了一些共用的代码和配置。下一步我们来创建service
子模块和web
子模块,来使用这些代码和配置。
2. 创建服务模块
service
子模块是我们的业务逻辑实现模块,我们可以在这个模块中实现我们业务的逻辑。在这个示例中,我们创建一个UserService
类,用来提供用户信息相关的业务操作。
@Service public class UserService { @Autowired private UserRepository userRepository; public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } }
在这个示例中,我们使用@Service
注解标记这个类为Spring Bean,使用@Autowired
注解注入了一个UserRepository
实例,用来实现持久化操作。然后我们定义了一个getUserById
方法,用来根据id
获取用户信息。
3. 创建Web模块
web
子模块是我们的Web模块,我们可以在这个模块中实现我们的Web接口和页面。在这个示例中,我们创建一个UserController
类,用来提供用户信息相关的接口操作。
@RestController public class UserController { @Autowired private UserService userService; @GetMapping("/user/{id}") public User getUserById(@PathVariable Long id) { return userService.getUserById(id); } }
在这个示例中,我们使用@RestController
注解标记这个类为Spring MVC的Controller类,使用@Autowired
注解注入了一个UserService
实例,用来调用业务逻辑处理。然后我们定义了一个getUserById
方法,用来根据id
获取用户信息,并返回给客户端。
现在,我们已经看到了如何使用Spring Boot多模块项目的优势来组织和管理我们的代码,包括创建父模块、子模块、通用模块、实现服务模块和Web模块等。通过这种方式,我们可以更好地实现代码分层管理和提高代码的可维护性。