共计 4664 个字符,预计需要花费 12 分钟才能阅读完成。
REST 已迅速成为在 Web 上构建 Web 服务的事实标准,因为它们易于构建且易于应用。对于 REST 如何适应微服务世界还有一个更大的探讨,然而——对于本教程——让咱们看看构建 RESTful 服务。为什么是 REST?REST 蕴含 Web 的规定,包含其架构、劣势和其余所有。这并不奇怪,因为它的作者 Roy Fielding 参加了十几个管理网络运行形式的标准。有什么益处?Web 及其外围协定 HTTP 提供了一系列性能:适合的口头 (GET, POST, PUT, DELETE, …) 缓存重定向和转发安全性(加密和身份验证)这些都是构建弹性服务的关键因素。但这还不是全副。网络是由许多渺小的标准形成的,因而它可能轻松倒退,而不会陷入“规范和平”的泥潭。开发人员可能利用 3rd 方工具包来实现这些不同的标准,并立刻让客户端和服务器技术触手可及。通过在 HTTP 之上构建,REST API 提供了构建办法:向后兼容的 API 可演进的 API 可扩大的服务平安的服务一系列无状态服务到有状态服务重要的是要意识到,无论如许广泛,REST 自身并不是一种规范,而是一种办法、一种格调、一组对您的架构的束缚,能够帮忙您构建 Web 规模的零碎。在本教程中,咱们将应用 Spring 产品组合来构建 RESTful 服务,同时利用 REST 的无堆栈个性。入门在实现本教程时,咱们将应用 Spring Boot。转到 Spring Initializr 并将以下依赖项增加到我的项目中:网络 JPAH2 将名称更改为“工资单”,而后抉择“生成我的项目”。A.zip 会下载。解压它。在外面你会发现一个简略的、基于 Maven 的我的项目,包含一个 pom.xml 构建文件(留神:你能够应用 Gradle。本教程中的示例将基于 Maven。)Spring Boot 能够与任何 IDE 一起应用。您能够应用 Eclipse、IntelliJ IDEA、Netbeans 等。Spring Tool Suite 是一个开源的、基于 Eclipse 的 IDE 发行版,它提供了 Eclipse 的 Java EE 发行版的超集。它包含使应用 Spring 应用程序更加容易的性能。这绝不是必须的。然而,如果您想要为您的击键带来额定的魅力,请考虑一下。到目前为止的故事……让咱们从咱们能构建的最简略的货色开始。事实上,为了尽可能简略,咱们甚至能够省略 REST 的概念。(稍后,咱们将增加 REST 以理解差别。)大图:咱们将创立一个简略的工资单服务来治理公司的员工。咱们将员工对象存储在(H2 内存中)数据库中,并拜访它们(通过称为 JPA 的货色)。而后咱们将应用容许通过 Internet 拜访的货色(称为 Spring MVC 层)包装它。以下代码在咱们的零碎中定义了一个 Employee。nonrest/src/main/java/payroll/Employee.javapackage payroll;import java.util.Objects;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;@Entityclass Employee {private @Id @GeneratedValue Long id;private String name;private String role;Employee() {}Employee(String name, String role) {this.name = name;this.role = role;}public Long getId() {return this.id;}public String getName() {return this.name;}public String getRole() {return this.role;}public void setId(Long id) {this.id = id;}public void setName(String name) {this.name = name;}public void setRole(String role) {this.role = role;}@Overridepublic boolean equals(Object o) {if (this == o)return true;if (!(o instanceof Employee))return false;Employee employee = (Employee) o;return Objects.equals(this.id, employee.id) && Objects.equals(this.name, employee.name)&& Objects.equals(this.role, employee.role);}@Overridepublic int hashCode() {return Objects.hash(this.id, this.name, this.role);}@Overridepublic String toString() {return “Employee{” + “id=” + this.id + “, name='” + this.name + ‘\” + “, role='” + this.role + ‘\” + ‘}’;}} 只管很小,但这个 Java 类蕴含很多:@Entity 是一个 JPA 正文,用于使该对象筹备好存储在基于 JPA 的数据存储中。id, name, 和 role 是咱们的 Employee 域对象的属性。id 用更多的 JPA 正文标记以批示它是主键并由 JPA 提供程序主动填充。当咱们须要创立一个新实例但还没有 id 时,会创立一个自定义构造函数。有了这个域对象定义,咱们当初能够转向 Spring Data JPA 来解决繁琐的数据库交互。Spring Data JPA 存储库是与反对针对后端数据存储创立、读取、更新和删除记录的办法的接口。在适当的状况下,一些存储库还反对数据分页和排序。Spring Data 依据接口中办法命名中的约定来综合实现。除了 JPA 之外,还有多个存储库实现。您能够应用 Spring Data MongoDB、Spring Data GemFire、Spring Data Cassandra 等。对于本教程,咱们将保持应用 JPA。Spring 使拜访数据变得容易。通过简略地申明以下 EmployeeRepository 接口,咱们将可能主动创立新员工更新现有的删除员工查找员工(一个、全副或按简略或简单属性搜寻)nonrest/src/main/java/payroll/EmployeeRepository.javapackage payroll;import org.springframework.data.jpa.repository.JpaRepository;interface EmployeeRepository extends JpaRepository<Employee, Long> {} 为了取得所有这些收费性能,咱们所要做的就是申明一个扩大 Spring Data JPA 的接口,JpaRepository 将域类型指定为 Employeeid 类型 Long。Spring Data 的存储库解决方案能够回避数据存储细节,而是应用特定于域的术语解决大多数问题。信不信由你,这足以启动应用程序!Spring Boot 应用程序至多是一个 public static void main 入口点和 @SpringBootApplication 注解。这通知 Spring Boot 尽可能提供帮忙。nonrest/src/main/java/payroll/PayrollApplication.javapackage payroll;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class PayrollApplication {public static void main(String… args) {SpringApplication.run(PayrollApplication.class, args);}}@SpringBootApplication 是一个引入组件扫描、主动配置和属性反对的元正文。在本教程中,咱们不会深入探讨 Spring Boot 的细节,但实质上,它将启动一个 servlet 容器并提供咱们的服务。然而,没有数据的应用程序不是很乏味,所以让咱们预加载它。Spring 将主动加载以下类:nonrest/src/main/java/payroll/LoadDatabase.javapackage payroll;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.CommandLineRunner;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationclass LoadDatabase {private static final Logger log = LoggerFactory.getLogger(LoadDatabase.class);@BeanCommandLineRunner initDatabase(EmployeeRepository repository) {return args -> {log.info(“Preloading ” + repository.save(new Employee(“Bilbo Baggins”, “burglar”)));log.info(“Preloading ” + repository.save(new Employee(“Frodo Baggins”, “thief”)));};}} 加载时会产生什么?CommandLineRunner 加载应用程序上下文后,Spring Boot 将运行所有 bean。此运行程序将申请 EmployeeRepository 您刚刚创立的正本。应用它,它将创立两个实体并存储它们。右键单击并运行 PayRollApplication,这就是你失去的:显示数据预加载的控制台输入片段 …2018-08-09 11:36:26.169 INFO 74611 — [main] payroll.LoadDatabase:预加载员工(id=1,name=Bilbo Baggins,角色 = 窃贼)2018-08-09 11:36:26.174 INFO 74611 — [main] payroll.LoadDatabase:预加载员工(id=2,name=Frodo Baggins,role=thief)… 这不是整个日志,而只是预加载数据的要害局部。(的确,查看整个控制台。这太棒了。)……. 未完待续 ……#java##spring##spring 认证 ##2022 待业季#
以上就是明天对于 Spring 的一些探讨,对你有帮忙吗?如果你有趣味深刻理解,欢送到 Spring 中国教育管理中心留言交换!