javascript
只需5分钟即可启动并运行分层架构:: Spring Boot第1部分
這是一個分為兩部分的系列,其中我將展示如何使用Spring Boot創建分層架構。
什么是分層體系結構:簡而言之,當我們構建企業應用程序時,我們維護不同的層以封裝特定于層的邏輯,這樣就不會溢出到另一層。 當我們考慮企業應用程序時,我們可以想象該架構的三個重要層。
1. 用戶界面 :與最終用戶進行交互,向他們顯示數據,接受用戶輸入,接受他們的命令等。
2. 業務層 :基于用戶命令和從用戶那里捕獲的數據(AKA表單),它會做出特定于域的決策,例如如何處理數據,查找哪個表,如何處理數據。從數據庫中獲取,因此可以在UI中顯示。
3. 持久層 :該層捕獲數據并對其進行持久化,同樣也捕獲數據狀態的任何更新,刪除和更改,因此您可以將此層視為維護特定于應用程序數據的狀態。
無論您的應用程序處于運行狀態還是關閉狀態,它都會存儲提交后的數據狀態。
通過分層體系結構,我們像所有代碼一樣創建每一層的邏輯封裝,有關UI的信息留在UI層中,有關業務邏輯的所有代碼均留在業務層中,等等。
每一層都與其相鄰的層通信,但是從不與不相鄰的另一層通信。
因此,如果您的應用程序具有三層UI,即Business,DAO,UI與Business進行通信,Business與UI進行通信以及DAO和DAO與Business進行通信。 通過這種方式,我們可以減少耦合,使層可重復使用,并歡迎體系結構的未來變化。 每個層都有其自己的模式,以適應將來的更改并使該層可重用。
我們都知道Spring為每個層提供了不同的組件,例如,對于UI,您可以使用Thymleaf或Spring模板或任何其他UI框架(如JSF);對于Business層,可以使用Controller和service;還可以在其中注入不同的框架(如Struts)它。 對于持久層,您可以使用Spring數據JPA,Hibernate,JDBC模板。 但是問題是您需要在pom.xml中添加所有插件/ Jars。 在類路徑中找到依賴項的正確版本。 如果版本不匹配,它將無法正常工作。 另外,您還需要在Spring XML文件中添加許多Spring特定的批注或XML條目,以在分層體系結構中使用那些組件/插件,這是一種繁瑣的方法。 另外,您需要打包它們并將它們部署在應用程序服務器中,因此需要許多手動干預。 Spring解決了這個問題,并提出了一個稱為Spring Boot的解決方案。
“ Spring-boot按照約定優于配置進行工作 ”-這意味著您不必考慮配置條目,僅需注意業務邏輯,只要您在類路徑中提到了那些要使用的組件即可,Spring Boot是如此。聰明,它將了解您想要使用相同的配置,并為您配置功能完備的組件。 假設您要在項目中使用JPA。 如果導入Spring boot starter JPA模塊,它將了解您要使用它,并會即時為您創建Spring模板的存儲庫和實用程序CRUD方法。 如果沒有Spring-boot,則需要配置JPA模板,從模板啟動會話工廠,獲取會話等,這些在這里不是必需的,Spring boot如此強大,可以為您完成此操作,當然,如果您想要自己控制配置,您可以覆蓋它們并使用自己的配置。
在本教程中,我將向您展示如何使用Spring-boot逐步創建MVC分層體系結構,您會感到驚訝。 在五分鐘之內,您可以創建并運行MVC架構,該架構以前需要花費大量時間,并且在版本不匹配的情況下會產生很多麻煩。
由于這是一個分為兩部分的系列,因此在第一部分中,我們將建立數據庫,并使用JPA存儲庫將Employee數據插入數據庫中。
在本教程中,我們將使用以下組件
1. H2數據庫 :這是一個內存數據庫,它將持久存儲數據,直到應用程序關閉。
2. Spring Data JPA :我們將使用Spring data JPA組件在數據庫中進行CRUD操作。
3. Rest Controller :與傳統的MVC不同, Rest Controller將以JSON格式顯示數據,而不是將響應轉發到View。
步驟1 :轉到start.spring.io并通過選擇Web,JPA,H2 Module下載模板項目。
步驟2:將該項目作為Maven項目導入eclipse。
步驟3:檢查pom.xml,spring-starter-web,spring-starter-data-jpa,h2模塊條目將在那里。 這些是Spring引導軟件包,其中包含jpa和web的所有必需依賴項,并維護依賴jar的正確版本,這樣就不會出現版本不匹配的問題。
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion><groupId>com.example</groupId> <artifactId>layerdArchitechture</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging><name>layerdArchitechture</name> <description>Demo project for Spring Boot</description><parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent><properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies><build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>步驟4:轉到src / main / resources下的application.properties文件,并將h2控制臺啟用為true,這樣我們就可以看到在h2數據庫中插入的數據。
spring.h2.console.enabled=true步驟5:讓我們創建一個Employee實體。
package com.example.layerdArchitechture.entity;import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;@Entity public class Employee { @Id@GeneratedValue private Long id; private String name; private String address; private String sex; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Employee [id=" + id + ", name=" + name + ", address=" + address + ", sex=" + sex + "]"; }}步驟6:現在創建一個EmployeeRepositiry接口,它將擴展CrudRepository接口,即時運行Spring-boot創建一個實現并創建所有的Utility(crud)方法,我們只需要聲明該接口就不需要做任何事情。
package com.example.layerdArchitechture.repository;import org.springframework.data.repository.CrudRepository;import org.springframework.stereotype.Repository; import com.example.layerdArchitechture.entity.Employee;@Repositorypublic interface EmployeeRepositiry extends CrudRepository<Employee, Long> {}步驟7.現在創建一個Data Loader類,它將使用上述創建的存儲庫將少量員工插入H2數據庫。 為此,我必須自動連接EmployeeRepository接口。 請在這里注意loadData方法。 我創建了一個員工列表,然后迭代該列表,并使用Java8中的lambda表達式將這些數據保存在H2數據庫中。
package com.example.layerdArchitechture;import java.util.ArrayList; import java.util.List;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import com.example.layerdArchitechture.entity.Employee; import com.example.layerdArchitechture.repository.EmployeeRepositiry;@Component public class InitDataLoader { @Autowired private EmployeeRepositiry rep;public void loadData() { createData().forEach( emp->{ rep.save(emp); System.out.println("Successfully saved ::" + emp); });}private List<Employee> createData() {List<Employee> employees = new ArrayList<Employee>();Employee emp = new Employee(); emp.setName("Shamik Mitra"); emp.setSex("M"); emp.setAddress("BagBazar"); Employee emp1 = new Employee(); emp1.setName("Samir Mitra"); emp1.setSex("M"); emp1.setAddress("BagBazar"); Employee emp2 = new Employee(); emp2.setName("Swastika Basu"); emp2.setSex("F"); emp2.setAddress("Baranagar");employees.add(emp); employees.add(emp1); employees.add(emp2); return employees; }}步驟9:我們需要告訴我們的應用程序掃描所有Spring Bean,并找到JPA存儲庫和實體文件并將它們注冊為Spring Bean,因此我們將使用兩個特殊的注釋
在Spring啟動主類的頂部,@SpringBoot和@EnableJpaRepositories。 請注意,在@EnableJpaRepositories批注中,我提到了從其開始查找存儲庫和實體的根包。
package com.example.layerdArchitechture; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @SpringBootApplication @EnableJpaRepositories("com.example.layerdArchitechture") public class LayerdArchitechtureApplication {public static void main(String[] args) { SpringApplication.run(LayerdArchitechtureApplication.class, args); }@Bean public CommandLineRunner loadData(InitDataLoader loader) { return args->loader.loadData(); } }注意loadData方法,這是Java樣式Bean配置,在這里我稱為InitLoader的load data方法。 當應用程序啟動時,將調用CommandLiner bean并將InitDataLoader作為Spring bean(IOC)注入,因此我可以期望在啟動Spring Boot應用程序時將所有數據插入數據庫中。
步驟10:啟動應用程序,我們可以看到員工已插入數據庫中,以驗證是否轉到以下網址
http:// localhost:8080 / h2-console我們可以看到以下內容
結論 :我們已經使用Spring Boot成功插入了數據。 這里要觀察的一件事:將數據插入數據庫中,我們不必編寫一行CRUD代碼和JPA模板配置代碼。 Spring Boot代表我們同樣的身份。 在第二部分中,我將向您展示如何將軟管數據公開為JSON格式,以便任何UI框架(Angular5)都將數據作為JSON使用或將這種分層體系結構用作微服務(請稍作更改以使其成為微服務組件),敬請期待。
翻譯自: https://www.javacodegeeks.com/2018/10/layered-architecture-running-just-5-minutes-spring-boot-part-1.html
總結
以上是生活随笔為你收集整理的只需5分钟即可启动并运行分层架构:: Spring Boot第1部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无服务器-仅仅是构建现代应用程序的一种方
- 下一篇: 二楼用英语怎么读 二楼的英语的读音