欢迎光临散文网 会员登陆 & 注册

Spring Boot 教程:服务组件

2020-09-04 19:16 作者:信码由缰  | 我要投稿

【注】本文译自: https://www.tutorialspoint.com/spring_boot/spring_boot_service_components.htm

    服务组件是包含 @Service 注解的类文件。这些类文件可用在与 @RestController 类文件所不同的层来编写业务逻辑。创建服务组件类文件如下所示:

public interface ProductService {

}

    以 @Service 注解实现接口的类如下所示:

@Service

public class ProductServiceImpl implements ProductService {

}

    回顾以前的教程中,我们使用产品服务 API(s) 来存储、获取、更新和删除产品。我们在 @RestController 类文件自身中编写业务逻辑。现在我们要把业务逻辑代码从控制器移到服务组件。

    你可以创建一个接口,包含增加、编辑、获取和删除方法,示例代码如下:

package com.tutorialspoint.demo.service;

import java.util.Collection;

import com.tutorialspoint.demo.model.Product;

public interface ProductService {

   public abstract void createProduct(Product product);

   public abstract void updateProduct(String id, Product product);

   public abstract void deleteProduct(String id);

   public abstract Collection<Product> getProducts();

}

    以下代码将让你创建一个以 @Service 注解来实现 ProductService 接口的类,用以编写存储、获取、删除和更新产品。

package com.tutorialspoint.demo.service;

import java.util.Collection;

import java.util.HashMap;

import java.util.Map;

import org.springframework.stereotype.Service;

import com.tutorialspoint.demo.model.Product;

@Service

public class ProductServiceImpl implements ProductService {

   private static Map<String, Product> productRepo = new HashMap<>();

   static {

      Product honey = new Product();

      honey.setId("1");

      honey.setName("Honey");

      productRepo.put(honey.getId(), honey);

      Product almond = new Product();

      almond.setId("2");

      almond.setName("Almond");

      productRepo.put(almond.getId(), almond);

   }

   @Override

   public void createProduct(Product product) {

      productRepo.put(product.getId(), product);

   }

   @Override

   public void updateProduct(String id, Product product) {

      productRepo.remove(id);

      product.setId(id);

      productRepo.put(id, product);

   }

   @Override

   public void deleteProduct(String id) {

      productRepo.remove(id);

   }

   @Override

   public Collection<Product> getProducts() {

      return productRepo.values();

   }

}

    以里的代码展示了 Rest Controller 类文件,我们用 @Autowired 来自动注入 ProductService 接口并调用其方法。

package com.tutorialspoint.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.HttpStatus;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import com.tutorialspoint.demo.model.Product;

import com.tutorialspoint.demo.service.ProductService;

@RestController

public class ProductServiceController {

   @Autowired

   ProductService productService;

   @RequestMapping(value = "/products")

   public ResponseEntity<Object> getProduct() {

      return new ResponseEntity<>(productService.getProducts(), HttpStatus.OK);

   }

   @RequestMapping(value = "/products/{id}", method = RequestMethod.PUT)

   public ResponseEntity<Object> 

      updateProduct(@PathVariable("id") String id, @RequestBody Product product) {

      

      productService.updateProduct(id, product);

      return new ResponseEntity<>("Product is updated successsfully", HttpStatus.OK);

   }

   @RequestMapping(value = "/products/{id}", method = RequestMethod.DELETE)

   public ResponseEntity<Object> delete(@PathVariable("id") String id) {

      productService.deleteProduct(id);

      return new ResponseEntity<>("Product is deleted successsfully", HttpStatus.OK);

   }

   @RequestMapping(value = "/products", method = RequestMethod.POST)

   public ResponseEntity<Object> createProduct(@RequestBody Product product) {

      productService.createProduct(product);

      return new ResponseEntity<>("Product is created successfully", HttpStatus.CREATED);

   }

}

    POJO class – Product.java 代码在此:

package com.tutorialspoint.demo.model;


public class Product {

   private String id;

   private String name;

   public String getId() {

      return id;

   }

   public void setId(String id) {

      this.id = id;

   }

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

}

   主 Spring Boot 应用如下:

package com.tutorialspoint.demo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class DemoApplication {

   public static void main(String[] args) {

      SpringApplication.run(DemoApplication.class, args);

   }

}

    Maven build – 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 

   http://maven.apache.org/xsd/maven-4.0.0.xsd">

   

   <modelVersion>4.0.0</modelVersion>

   <groupId>com.tutorialspoint</groupId>

   <artifactId>demo</artifactId>

   <version>0.0.1-SNAPSHOT</version>

   <packaging>jar</packaging>

   <name>demo</name>

   <description>Demo project for Spring Boot</description>

   <parent>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-parent</artifactId>

      <version>1.5.8.RELEASE</version>

      <relativePath/> 

   </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-web</artifactId>

      </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>

    Gradle Build – build.gradle 代码如下:

buildscript {

   ext {

      springBootVersion = '1.5.8.RELEASE'

   }

   repositories {

      mavenCentral()

   }

   dependencies {

      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

   }

}

apply plugin: 'java'

apply plugin: 'eclipse'

apply plugin: 'org.springframework.boot'

group = 'com.tutorialspoint'

version = '0.0.1-SNAPSHOT'

sourceCompatibility = 1.8

repositories {

   mavenCentral()

}

dependencies {

   compile('org.springframework.boot:spring-boot-starter-web')

   testCompile('org.springframework.boot:spring-boot-starter-test')

}

   现在你可以使用 Maven 或 Gradle 命令创建可执行 executable JAR 文件并运行 Spring Boot 应用了:

   Maven 命令如下:

mvn clean install

   在 “BUILD SUCCESS” 之后,你可以在 target 目录下找到 JAR 文件。

   Gradle 可以使用以下命令:

gradle clean build

   在 “BUILD SUCCESSFUL” 之后,你可以在 build/libs 目录下找到 JAR 文件。

   现在,使用以下命令运行 JAR 文件:

java –jar <JARFILE>

   应用将在 Tomcat 8080 端口启动,如下图所示:

   现在在 POSTMAN 应用中输入以下 URL,可以看到下图所示的输出:

    GET API URL 为: http://localhost:8080/products

    POST API URL 为: http://localhost:8080/products

    PUT API URL 为: http://localhost:8080/products/3

    DELETE API URL 为: http://localhost:8080/products/3


Spring Boot 教程:服务组件的评论 (共 条)

分享到微博请遵守国家法律