包含嵌套Maven項(xiàng)目的Spring Boot項(xiàng)目稱為 多模塊項(xiàng)目。在多模塊項(xiàng)目中,父項(xiàng)目充當(dāng)基礎(chǔ)Maven配置的容器。
換句話說, 多模塊項(xiàng)目是從管理一組子模塊的父pom構(gòu)建的?;?多模塊項(xiàng)目由父POM引用一個(gè)或多個(gè)子模塊來定義。
父maven項(xiàng)目必須包含 pom 的包裝類型使該項(xiàng)目成為聚合器。父項(xiàng)目的 pom.xml 文件包含子項(xiàng)目繼承的所有 模塊,公共依賴項(xiàng)和 屬性的列表。父pom位于項(xiàng)目的根目錄中。子模塊是實(shí)際的Spring Boot項(xiàng)目,它們從父項(xiàng)目繼承maven屬性。
當(dāng)我們運(yùn)行多模塊項(xiàng)目時(shí),所有模塊都一起部署在嵌入式Tomcat Server中。我們也可以部署單個(gè)模塊。
父POM定義了 組ID,工件ID,版本,和 packaging。。在以前的Maven項(xiàng)目中,我們已經(jīng)看到父級(jí)POM定義了包裝 jar。。但是在多模塊項(xiàng)目中,父級(jí) POM 定義包裝pom。打包pom引用了其他Maven項(xiàng)目。
將項(xiàng)目分為多個(gè)模塊是有用且易于維護(hù)的。我們還可以輕松編輯或刪除項(xiàng)目中的模塊,而不會(huì)影響其他模塊。當(dāng)我們需要分別部署模塊時(shí),這很有用。
我們只需要在父pom中指定所有依賴項(xiàng)即可。所有其他模塊共享相同的pom,因此我們無需在每個(gè)模塊中分別指定相同的依賴項(xiàng)。
子模塊可以是任何項(xiàng)目,并且可以有任何包裝。我們可以自由地在模塊和束之間創(chuàng)建任何類型的依賴關(guān)系。
例如,我們正在創(chuàng)建 EAR (企業(yè)歸檔), WAR (Web ARchive)和 JAR (Java ARchive)文件。 JAR文件捆綁到war文件中,而war文件捆綁到EAR文件中。 EAR文件是可以在應(yīng)用程序服務(wù)器上部署的最終軟件包。
EAR文件包含一個(gè)或多個(gè)WAR文件。每個(gè)WAR文件都包含服務(wù)項(xiàng)目,該項(xiàng)目對JAR中的所有WAR文件和打包類型具有通用代碼。
子模塊是獨(dú)立的maven項(xiàng)目,它們共享父項(xiàng)目的屬性。 所有子項(xiàng)目都可以用一個(gè)命令來構(gòu)建,因?yàn)樗挥诟疙?xiàng)目中。 定義項(xiàng)目之間的關(guān)系更容易。
讓我們了解多模塊項(xiàng)目目錄結(jié)構(gòu)。
在下圖中,我們創(chuàng)建了一個(gè)名為 spring-boot-multi-module-project 的項(xiàng)目。它在目錄底部包含父 pom 。之后,我們創(chuàng)建了兩個(gè) Maven模塊,分別命名為 module1 和 module2 。這兩個(gè)模塊包含自己的pom文件。
讓我們打開父POM,并查看在項(xiàng)目中創(chuàng)建Maven模塊時(shí)其配置。
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.BUILD-SNAPSHOT</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.nhooo</groupId> <artifactId>spring-boot-example</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-multi-module-project</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <packaging>pom</packaging> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </pluginRepository> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <modules> <module>module1</module> <module>module2</module> </modules> </project>
上面的pom文件與前面的示例相同。但是在此 pom 文件中,需要注意兩件事: 包裝和 模塊。
當(dāng)我們創(chuàng)建多模塊時(shí)項(xiàng)目,我們需要在父pom文件中配置打包pom,而不是 jar。
<packaging>pom</packaging>
當(dāng)我們在項(xiàng)目中創(chuàng)建Maven模塊時(shí),Spring Boot會(huì)在 module 標(biāo)簽內(nèi)的父pom中自動(dòng)配置模塊,如下所示。
<modules> <module>module1</module> <module>module2</module> </modules>
現(xiàn)在,我們將查看 module1的pom文件中的內(nèi)容。
pom.xml
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.nhooo</groupId> <artifactId>spring-boot-multi-module-project</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.nhooo</groupId> <artifactId>module1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>module1</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
在此處,需要注意的是,上述pom文件不包含諸如 starter-web,web-mvc等之類的公共依賴項(xiàng)。它繼承了所有公共依賴項(xiàng)和屬性 父pom。
讓我們創(chuàng)建一個(gè)多模塊應(yīng)用程序示例。
在以下示例中,我們創(chuàng)建了一個(gè)名為 spring-boot-multimodule的maven項(xiàng)目。這是主要應(yīng)用程序。在主應(yīng)用程序中,我們創(chuàng)建了五個(gè)模塊,如下所示: 應(yīng)用 模型 存儲(chǔ)庫 service-api service-impl
應(yīng)用程序模塊
應(yīng)用程序模塊是項(xiàng)目的主要模塊。它包含應(yīng)用程序類,在其中定義了運(yùn)行Spring Boot Application所需的main方法。它還包含 應(yīng)用程序配置屬性,控制器,視圖和 資源。
應(yīng)用程序模塊包括模型模塊,服務(wù)實(shí)現(xiàn)模塊作為包含模型的依賴項(xiàng)模塊,存儲(chǔ)庫模塊和服務(wù)API模塊。
模型模塊
模型模塊包含 實(shí)體和在項(xiàng)目中使用的 Visual Objects 。
存儲(chǔ)庫模塊
存儲(chǔ)庫模塊包含 <在項(xiàng)目中使用的strong> 存儲(chǔ)庫。它取決于模型模塊。
服務(wù)API模塊
服務(wù)API模塊包含所有項(xiàng)目 服務(wù)。這也取決于模型模塊。
服務(wù)實(shí)現(xiàn)模塊
服務(wù)實(shí)現(xiàn)模塊可以實(shí)現(xiàn)服務(wù)。它取決于存儲(chǔ)庫模塊和服務(wù)API模塊。
父pom包含所有應(yīng)用程序模塊。它還包括一個(gè)以上模塊所需的所有常見依賴關(guān)系和屬性。因?yàn)轫?xiàng)目已將Spring IO Platform定義為父級(jí),所以沒有版本就定義了依賴項(xiàng)。
讓我們了解我們創(chuàng)建的多模塊應(yīng)用程序的結(jié)構(gòu)。
Spring-boot-multimodule ├── pom.xml │ └── REDME.adoc ├── application │ ├── pom.xml │ └── src │ └── main │ ├── java │ │ └── sample │ │ └── multimodule │ │ ├── SampleWebJspApplication.java │ │ └── web │ │ └── WelcomeController.java │ └── resources │ ├── application.properties │ └── templates │ └── welcome │ └── show.html ├── model │ ├── pom.xml │ └── src │ └── main │ └── java │ └── sample │ └── multimodule │ └── domain │ └── entity │ └── Account.java | ├── repository │ ├── pom.xml │ └── src │ └── main │ └── java │ └── sample │ └── multimodule │ └── repository │ └── AccountRepository.java ├── service-api │ ├── pom.xml │ └── src │ └── main │ └── java │ └── sample │ └── multimodule │ └── service │ └── api │ ├── AccountNotFoundException.java │ └── AccountService.java └── service-impl ├── pom.xml └── src └── main └── java └── sample └── multimodule └── service └── impl └── AccountServiceImpl.java
步驟1: 創(chuàng)建一個(gè)名為 spring-boot-multimodule的 Maven項(xiàng)目。
步驟2: 打開 pom.xml (父pom)文件,并將包裝類型 jar 更改為 pom。
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- Springio 平臺(tái)是生成的應(yīng)用程序的父應(yīng)用程序,能夠使用 Spring Boot 及其所有缺省配置 --> <parent> <groupId>io.spring.platform</groupId> <artifactId>platform-bom</artifactId> <version>2.0.1.RELEASE</version> </parent> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>Parent - Pom Aggregator</name> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- Spring Boot 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
在上面的pom文件中要注意的一件事是,由于尚未創(chuàng)建Maven模塊,因此未配置?,F(xiàn)在,我們將如上所述創(chuàng)建一個(gè)Maven模塊。
步驟3: 創(chuàng)建一個(gè)名為 application的 Maven模塊 。
步驟4: 打開應(yīng)用程序模塊的 pom.xml 文件,并確保打包類型為 jar。
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>sample.multimodule.application</artifactId>
<packaging>jar</packaging>
<name>Project Module - Application</name>
<dependencies>
<!-- Project modules -->
<dependency>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule.service.impl</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Spring Boot dependencies -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Spring Boot plugins -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
步驟5: 創(chuàng)建 主要類。這是要運(yùn)行的類。
SampleWebJspApplication.java
package sample.multimodule;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.orm.jpa.EntityScan;
@SpringBootApplication
public class SampleWebJspApplication
{
public static void main(String[] args) throws Exception
{
SpringApplication.run(SampleWebJspApplication.class, args);
}
}
步驟6: 在包 smaple.multimodule.web。
下創(chuàng)建一個(gè)名稱為 WelocameController 的Controller類。
WelcomeController.java
package sample.multimodule.web;
import java.util.Date;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import sample.multimodule.domain.entity.Account;
import sample.multimodule.service.api.AccountService;
@Controller
public class WelcomeController
{
@Value("${application.message:Hello World}")
private String message = "Hello World";
@Autowired
protected AccountService accountService;
@RequestMapping("/")
public String welcome(Map<String, Object> model)
{
//試圖獲得23號(hào)帳戶
Account account = accountService.findOne("23");
if(account == null){
//如果創(chuàng)建帳戶時(shí)出現(xiàn)問題,請返回顯示錯(cuò)誤狀態(tài)的視圖
model.put("message", "Error getting account!");
model.put("account", "");
return "welcome/show";
}
//返回顯示23個(gè)帳戶信息的視圖
String accountInfo = "Your account number is ".concat(account.getNumber());
model.put("message", this.message);
model.put("account", accountInfo);
return "welcome/show";
}
@RequestMapping("foo")
public String foo(Map<String, Object> model) {
throw new RuntimeException("Foo");
}
}
第7步: : 在文件夾 src/main/resource下創(chuàng)建一個(gè)名為 show.html 的 HTML templates ->welcome。
show.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Spring Boot Multimodule</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<div>
<b>Message: </b>
<span th:text="${message}" />
</div>
<div>
<b>Your account: </b>
<span th:text="${account}" />
</div>
</body>
</html>
步驟8: 打開 application.properties 文件,將 application message和 thymeleaf緩存配置為 否。
application.properties
#應(yīng)用程序信息 application.message = Hello User! dummy.type = type-inside-the-war #Spring Thymeleaf 配置 spring.thymeleaf.cache = false
創(chuàng)建上述所有文件后,應(yīng)用程序模塊目錄如下所示:
讓我們創(chuàng)建第二個(gè)模塊,即 model。
步驟9: 創(chuàng)建一個(gè) Maven Module,名稱為 model。
步驟10: 打開模型的 pom.xml 文件模塊,并確保包裝類型為 jar。
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>sample.multimodule.model</artifactId> <packaging>jar</packaging> <name>Project Module - Model</name> <description>Module that contains all Entities and Visual Objects to be used in the project. It doesn't have any dependencies. </description> </project>
步驟11: 在包 sample.multimodule.domain.entity。
下創(chuàng)建一個(gè)名稱為 Account 的類。Account.java
package sample.multimodule.domain.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class Account
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String number;
private String type;
private String creditCardNumber;
/**
* 創(chuàng)建一個(gè)空帳戶。
*/
public Account() {
}
/**
* 創(chuàng)建新帳戶。
*
* @param number
* the account number
* @param id
* the account id
*/
public Account(long id, String number) {
this.number = number;
this.id = id;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCreditCardNumber() {
return creditCardNumber;
}
public void setCreditCardNumber(String creditCardNumber) {
this.creditCardNumber = creditCardNumber;
}
}
創(chuàng)建所有上述文件后,模型模塊目錄如下:
讓我們創(chuàng)建 third 模塊
步驟12: 創(chuàng)建一個(gè)名為 repository的 Maven模塊。 strong>
步驟13: 打開應(yīng)用程序模塊的 pom.xml 文件,并確保打包類型為 jar。
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>sample.multimodule.repository</artifactId>
<packaging>jar</packaging>
<name>Project Module - Repository</name>
<description>Module that contains all repositories to be used in the project. Depends of Model Module.</description>
<dependencies>
<!-- Project modules -->
<dependency>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule.model</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Spring Boot dependencies -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
步驟14: 在包 sample.multimodule.repository
創(chuàng)建一個(gè)名稱為 AccountRepository 的類。
AccountRepository.java
package sample.multimodule.repository;
import org.springframework.data.domain.*;
import org.springframework.data.repository.*;
import org.springframework.stereotype.Repository;
import sample.multimodule.domain.entity.Account;
@Repository
public interface AccountRepository extends CrudRepository<Account, Long>
{
Account findByNumber(String number);
}
創(chuàng)建上述所有文件后,存儲(chǔ)庫模塊目錄如下所示:
讓我們創(chuàng)建 第四模塊,它是 service-api。
步驟15: 創(chuàng)建一個(gè)名為 service-api的 Maven模塊。
步驟16 : 打開 <strong應(yīng)用程序service-api 的> pom.xml 文件,并確保打包類型為 jar。
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>sample.multimodule.service.api</artifactId>
<packaging>jar</packaging>
<name>Project Module - Service API</name>
<description>Module that contains API of all project services. Depends of Model Module.</description>
<dependencies>
<!-- Project Modules -->
<dependency>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule.model</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
步驟17: 創(chuàng)建名稱為 sample.multimodule.service.api的軟件包。
步驟18: 創(chuàng)建一個(gè)名稱為 AccountNotFoundException的類。如果未找到該帳戶,它將處理異常。
AccountNotFoundException.java
package sample.multimodule.service.api;
public class AccountNotFoundException extends RuntimeException
{
private static final long serialVersionUID = -3891534644498426670L;
public AccountNotFoundException(String accountId)
{
super("No such account with id: " + accountId);
}
}
步驟19: 創(chuàng)建一個(gè)名為 AccountService的類。它提供與帳戶相關(guān)的服務(wù),例如 查找和 創(chuàng)建帳戶。
AccountService.java
package sample.multimodule.service.api;
import java.util.List;
import sample.multimodule.domain.entity.Account;
public interface AccountService
{
/**
* 使用提供的帳號(hào)查找?guī)簟?
*
* @param number The account number
* @return The account
* @throws AccountNotFoundException if no such account exists.
*/
Account findOne(String number) throws AccountNotFoundException;
/**
* Creates a new account.
* @param number
* @return created account
*/
Account createAccountByNumber(String number);
}
創(chuàng)建上述所有文件之后,service-api模塊目錄如下所示:
步驟20: 創(chuàng)建一個(gè)名為 service-impl的 Maven模塊。
步驟21: : 打開應(yīng)用程序 service-impl 的 pom.xml 文件,并確保包裝類型為jar。
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>sample.multimodule.service.impl</artifactId>
<packaging>jar</packaging>
<name>Project Module - Service Implementation</name>
<description>Module that contains services implementation defined on Service API module. Depends of Repository Module and Service API Module.</description>
<dependencies>
<!-- Project Modules -->
<dependency>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule.repository</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule.service.api</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
步驟22: 在包 sample.multimodule.service.impl。
下創(chuàng)建一個(gè)名稱為 AccountServiceImpl 的類。AccountServiceImpl.java
package sample.multimodule.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import sample.multimodule.domain.entity.Account;
import sample.multimodule.repository.AccountRepository;
import sample.multimodule.service.api.AccountService;
import sample.multimodule.service.api.AccountNotFoundException;
@Service
public class AccountServiceImpl implements AccountService
{
@Value("${dummy.type}")
private String dummyType;
@Autowired
private AccountRepository accountRepository;
/**
* {@inheritDoc}
* <p/>
* Dummy method for testing purposes.
*
* @param number The account number. Set 0000 to get an {@link AccountNotFoundException}
*/
@Override
public Account findOne(String number) throws AccountNotFoundException {
if(number.equals("0000")) {
throw new AccountNotFoundException("0000");
}
Account account = accountRepository.findByNumber(number);
if(account == null){
account = createAccountByNumber(number);
}
return account;
}
@Override
public Account createAccountByNumber(String number) {
Account account = new Account();
account.setNumber(number);
return accountRepository.save(account);
}
public String getDummyType() {
return dummyType;
}
public void setDummyType(String dummyType) {
this.dummyType = dummyType;
}
}
創(chuàng)建上述所有文件后, service-impl 模塊目錄如下所示:
現(xiàn)在打開 父pom 文件,我們看到已創(chuàng)建的所有Maven模塊都在 中的父pom
現(xiàn)在確保所有五個(gè)模塊都已安裝創(chuàng)建,如下所示:
創(chuàng)建后所有模塊,主項(xiàng)目目錄如下所示:
步驟23: 現(xiàn)在,將 SampleWebJspApplication.java 文件作為Java應(yīng)用程序運(yùn)行。
步驟24: 打開瀏覽器并調(diào)用URL http: //localhost: 8080。它返回 消息和帳號(hào)為 23。
