您好,登錄后才能下訂單哦!
前言
所謂的服務(wù)組件(Service Component)— 就是用于處理系統(tǒng)業(yè)務(wù)邏輯的類,如果按照系統(tǒng)分層設(shè)計(jì)理論來劃分,服務(wù)組件是位于業(yè)務(wù)層當(dāng)中的類。在Spring Boot中,服務(wù)組件是一個(gè)被**@Service**注解進(jìn)行注釋的類,這些類用于編寫系統(tǒng)的業(yè)務(wù)代碼。在本章節(jié)中,將講解如何創(chuàng)建并使用服務(wù)組件。
在開始正文之前,先來看兩段示例代碼。使用服務(wù)組件之前,我們需要定義服務(wù)組件接口類,用于索引服務(wù)組件提供的服務(wù),代碼如下所示:
public interface UserService{ // TODO ... }
然后,需要使用**@Service**注解對(duì)服務(wù)組件接口實(shí)現(xiàn)類進(jìn)行注釋,演示代碼如下:
@Service(value="userService") public class UserServiceImpl implements UserService{ //TODO ... }
最后,使用**@Autowired**注解來自動(dòng)引用服務(wù)組件,代碼如下:
@Controller public class DemoController{ @Autowired UserService userService; //TODO ... }
在本次講解中,我們依然以對(duì)用戶的增、刪、改、查為案例,將控制器中的業(yè)務(wù)方法遷移到服務(wù)組件中。
1. 創(chuàng)建服務(wù)接口
創(chuàng)建一個(gè)包含添加用戶、更新用戶、刪除用戶和查詢用戶的服務(wù)接口類 — 用戶服務(wù)組件接口類。詳細(xì)代碼如下:
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. 實(shí)現(xiàn)服務(wù)接口
創(chuàng)建一個(gè)接口實(shí)現(xiàn)類,用于實(shí)現(xiàn)其中的增、刪、改、查四個(gè)業(yè)務(wù)方法,并用**@Service**注解進(jìn)行標(biāo)注,具體代碼如下:
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. 使用服務(wù)組件
接下來,定義一個(gè)用戶控制器,使用**@Autowired**注解來應(yīng)用用戶服務(wù)組件,實(shí)現(xiàn)對(duì)用戶的增、刪、改、查功能:
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. 數(shù)據(jù)模型
用戶對(duì)象的代碼沿用以往章節(jié)的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; } }
注:應(yīng)用程序主類和Maven build文件與之前章節(jié)的代碼形同,不再列舉。
5. 運(yùn)行測(cè)試
啟動(dòng)Spring Boot應(yīng)用程序,然后打開Postman測(cè)試應(yīng)用程序,分別進(jìn)行如下的測(cè)試。
GET 請(qǐng)求:獲取所有的用戶信息。
URL地址:http://localhost:8080/users
獲取用戶信息
POST 請(qǐng)求:新增一位用戶信息
URL地址:http://localhost:8080/users
請(qǐng)求參數(shù):{“id”:3,"name":"reader"}
新增用戶
PUT請(qǐng)求:修改用戶信息
URL地址:http://localhost:8080/users/3
請(qǐng)求參數(shù):{“id”:3,"name":"ramostear"}
修改用戶
DELETE請(qǐng)求:刪除用戶信息
URL地址:http://localhost:8080/users/3
刪除用戶
6. 附件
本章節(jié)用于演示的項(xiàng)目源碼已經(jīng)上傳到Github代碼倉庫,你可以通過下面的地址鏈接免費(fèi)獲取本章節(jié)的全部源碼信息:
github.com/ramostear/S …(本地下載)
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。