使用Spring Boot 2.0快速構建服務元件

羅摩爾發表於2019-04-10

所謂的服務元件(Service Component)— 就是用於處理系統業務邏輯的類,如果按照系統分層設計理論來劃分,服務元件是位於業務層當中的類。在Spring Boot中,服務元件是一個被**@Service**註解進行註釋的類,這些類用於編寫系統的業務程式碼。在本章節中,將講解如何建立並使用服務元件。

在開始正文之前,先來看兩段示例程式碼。使用服務元件之前,我們需要定義服務元件介面類,用於索引服務元件提供的服務,程式碼如下所示:

public interface UserService{
    // TODO ...
}
複製程式碼

然後,需要使用**@Service**註解對服務元件介面實現類進行註釋,演示程式碼如下:

@Service(value="userService")
public class UserServiceImpl implements UserService{
    //TODO ...
}
複製程式碼

最後,使用**@Autowired**註解來自動引用服務元件,程式碼如下:

@Controller
public class DemoController{
    @Autowired
    UserService userService;
    //TODO ...
}
複製程式碼

在本次講解中,我們依然以對使用者的增、刪、改、查為案例,將控制器中的業務方法遷移到服務元件中。

1. 建立服務介面

建立一個包含新增使用者、更新使用者、刪除使用者和查詢使用者的服務介面類 — 使用者服務元件介面類。詳細程式碼如下:

package com.ramostear.application.service;

import com.ramostear.application.model.User;

import java.util.Collection;

/**
 * Created by ramostear on 2019/3/11 0011.
 */
public interface UserService {

    /**
     * create user
     * @param user
     */
    void create(User user);

    /**
     * update user info by ID
     * @param id
     * @param user
     */
    void update(long id,User user);

    /**
     * delete user by ID
     * @param id
     */
    void delete(long id);

    /**
     * query all user
     * @return
     */
    Collection<User> findAll();
}

複製程式碼

2. 實現服務介面

建立一個介面實現類,用於實現其中的增、刪、改、查四個業務方法,並用**@Service**註解進行標註,具體程式碼如下:

package com.ramostear.application.service.impl;

import com.ramostear.application.model.User;
import com.ramostear.application.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * @author ramostear
 * @create-time 2019/3/11 0011-4:29
 * @modify by :
 * @since:
 */
@Service(value="userService")
public class UserServiceImpl implements UserService {

    private static Map<Long,User> userRepo = new HashMap<>();

    @PostConstruct
    public void initUserRepo(){
        User admin = new User();
        admin.setId(1).setName("admin");
        userRepo.put(admin.getId(),admin);

        User editor = new User();
        editor.setId(2).setName("editor");
        userRepo.put(editor.getId(),editor);
    }
    @Override
    public void create(User user) {
        userRepo.put(user.getId(),user);
    }

    @Override
    public void update(long id, User user) {
        userRepo.remove(id);
        user.setId(id);
        userRepo.put(id,user);
    }

    @Override
    public void delete(long id) {
        userRepo.remove(id);
    }

    @Override
    public Collection<User> findAll() {
        return userRepo.values();
    }
}

複製程式碼

3. 使用服務元件

接下來,定義一個使用者控制器,使用**@Autowired**註解來應用使用者服務元件,實現對使用者的增、刪、改、查功能:

package com.ramostear.application.controller;

import com.ramostear.application.model.User;
import com.ramostear.application.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

/**
 * @author ramostear
 * @create-time 2019/3/11 0011-4:42
 * @modify by :
 * @since:
 */
@RestController
public class UserController {

    @Autowired
    UserService userService;


    @GetMapping("/users")
    public ResponseEntity<Object> users(){
        return new ResponseEntity<>(userService.findAll(), HttpStatus.OK);
    }

    @PostMapping("/users")
    public ResponseEntity<Object> create(@RequestBody User user){
       userService.create(user);
       return new ResponseEntity<>("User is created successfully.",HttpStatus.CREATED);
    }

    @PutMapping("/users/{id}")
    public ResponseEntity<Object> update(@PathVariable(name="id") long id,@RequestBody User user){
        userService.update(id,user);
        return new ResponseEntity<>("User is updated successfully.",HttpStatus.OK);
    }

    @DeleteMapping("/users/{id}")
    public ResponseEntity<Object> delete(@PathVariable(name = "id")long id){
        userService.delete(id);
        return new ResponseEntity<>("User is deleted successfully.",HttpStatus.OK);
    }
}
複製程式碼

4. 資料模型

使用者物件的程式碼沿用以往章節的User.java程式碼:

package com.ramostear.application.model;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * @author ramostear
 * @create-time 2019/3/6 0006-3:12
 * @modify by :
 * @since:
 */
@Getter
@Setter
@NoArgsConstructor
public class User {
    private long id;
    private String name;

    public User setId(long id){
        this.id = id;
        return this;
    }

    public User setName(String name){
        this.name = name;
        return this;
    }
}
複製程式碼

注:應用程式主類和Maven build檔案與之前章節的程式碼形同,不再列舉。

5. 執行測試

啟動Spring Boot應用程式,然後開啟Postman測試應用程式,分別進行如下的測試。

GET 請求:獲取所有的使用者資訊。

URL地址:http://localhost:8080/users

獲取使用者資訊
獲取使用者資訊

POST 請求:新增一位使用者資訊

URL地址:http://localhost:8080/users

請求引數:{“id”:3,"name":"reader"}

新增使用者
新增使用者

PUT請求:修改使用者資訊

URL地址:http://localhost:8080/users/3

請求引數:{“id”:3,"name":"ramostear"}

修改使用者
修改使用者

DELETE請求:刪除使用者資訊

URL地址:http://localhost:8080/users/3

刪除使用者
刪除使用者

6. 附件

本章節用於演示的專案原始碼已經上傳到Github程式碼倉庫,你可以通過下面的地址連結免費獲取本章節的全部原始碼資訊:github.com/ramostear/S…

作者:譚朝紅 ,原文:在Spring Boot中定義服務元件

相關文章