服务组件是包含@Service批注的类文件,这些类文件用于与@RestController类文件分开不同业务逻辑。这里显示了创建服务组件类文件的逻辑-
public interface ProductService { }
用@Service注释实现Interface的类如下所示:
@Service public class ProductServiceImpl implements ProductService { }
请注意,在本教程中,使用产品服务API 来存储,检索,更新和删除产品。在@RestController类文件本身中编写了业务逻辑。现在,无涯教程将把业务逻辑代码从控制器转移到服务组件。
您可以使用如下所示的代码创建一个包含添加,编辑,获取和删除方法的接口-
package com.learnfk.demo.service;import java.util.Collection; import com.learnfk.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.learnfk.demo.service;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Service;
import com.learnfk.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);
</span><span class="typ">Product</span><span class="pln"> almond</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Product</span><span class="pun">();</span><span class="pln">
almond</span><span class="pun">.</span><span class="pln">setId</span><span class="pun">(</span><span class="str">"2"</span><span class="pun">);</span><span class="pln">
almond</span><span class="pun">.</span><span class="pln">setName</span><span class="pun">(</span><span class="str">"Almond"</span><span class="pun">);</span><span class="pln">
productRepo</span><span class="pun">.</span><span class="pln">put</span><span class="pun">(</span><span class="pln">almond</span><span class="pun">.</span><span class="pln">getId</span><span class="pun">(),</span><span class="pln"> almond</span><span class="pun">);</span><span class="pln">
}
@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.learnfk.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.learnfk.demo.model.Product;
import com.learnfk.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</span><span class="pun">.</span><span class="pln">updateProduct</span><span class="pun">(</span><span class="pln">id</span><span class="pun">,</span><span class="pln"> product</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ResponseEntity</span><span class="pun"><>(</span><span class="str">"Product is updated successsfully"</span><span class="pun">,</span><span class="pln"> </span><span class="typ">HttpStatus</span><span class="pun">.</span><span class="pln">OK</span><span class="pun">);</span><span class="pln">
}
@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类– Product.java的代码如下所示-
package com.learnfk.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.learnfk.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构建的代码– 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.learnfk</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>
</span><span class="tag"><dependency></span><span class="pln">
</span><span class="tag"><groupId></span><span class="pln">org.springframework.boot</span><span class="tag"></groupId></span><span class="pln">
</span><span class="tag"><artifactId></span><span class="pln">spring-boot-starter-test</span><span class="tag"></artifactId></span><span class="pln">
</span><span class="tag"><scope></span><span class="pln">test</span><span class="tag"></scope></span><span class="pln">
</span><span class="tag"></dependency></span><span class="pln">
</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.learnfk 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) }
您可以创建一个可执行的JAR文件,并使用下面给出的Maven或Gradle命令运行Spring Boot应用程序-
对于Maven,使用如下所示的命令-
mvn clean install
在" BUILD SUCCESS"之后,您可以在目标目录下找到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