Spring Boot คือ ตอนที่ 5 : คำอธิบายประกอบ (Annotations)

  1. ภาพรวมของคำอธิบายประกอบ (Annotations) ใน Spring Boot
  2. การทำแอพ Spring Boot
    การตั้งค่าคลาสแอปพลิเคชันหลัก (Main Application Class)
    การตั้งค่าโมเดล (Model)
    การสร้างพื้นที่เก็บข้อมูล (Repository)
    การสร้างบริการ (Service)
    การสร้างคอนโทรลเลอร์ (Controller)

Spring Boot เป็นเฟรมเวิร์กที่รู้จักกันดีในระบบนิเวศของ Java มีเครื่องมือและคุณสมบัติที่ทรงพลังเพื่อทำแอพแบบสแตนด์อโลนระดับการผลิตได้อย่างรวดเร็ว เพื่อลดโค้ดสำเร็จรูป (boilerplate code) และมุ่งเน้นไปที่การเขียนตรรกะทางธุรกิจจริง Spring Boot ใช้ชุดของคำอธิบายประกอบ (Annotations) ที่กำหนดไว้ล่วงหน้า บทความนี้จะกล่าวถึงคำอธิบายประกอบ Spring Boot และแสดงวิธีทำแอพ Spring Boot โดยใช้คำอธิบายประกอบ (Annotations) เหล่านี้

1. ภาพรวมของคำอธิบายประกอบ (Annotations) ใน Spring Boot

ใน Spring Boot คำอธิบายประกอบ (Annotations) จะใช้เพื่อทำให้ขั้นตอนการเขียนโค้ดง่ายขึ้น โดยพื้นฐานแล้วเป็นเครื่องหมายที่ให้ข้อมูลเมตาเกี่ยวกับส่วนของโค้ด จากนั้นข้อมูลเมตานี้สามารถประมวลผลโดย Spring framework เพื่อดำเนินการเช่นการแทรกการพึ่งพา การกำหนดค่าและอื่น ๆ

มีคำอธิบายประกอบมากมายใน Spring Boot แต่บางคำอธิบายประกอบมักใช้มากกว่าคำอธิบายประกอบอื่นๆ ที่นี่ เราจะมุ่งเน้นไปที่คำอธิบายประกอบ (Annotations) ที่สำคัญเหล่านี้ ซึ่งรวมถึง:

  1. @SpringBootApplication : นี่คือคำอธิบายประกอบหลักใน Spring Boot คำอธิบายประกอบนี้มักจะอยู่ในคลาสแอ็พพลิเคชันหลัก เป็นคำอธิบายประกอบเพื่อความสะดวกที่รวม @Configuration, @EnableAutoConfiguration และ @ComponentScan
  2. @ComponentScan : Spring ใช้คำอธิบายประกอบนี้เพื่อสแกนและระบุคลาสที่มีคำอธิบายประกอบด้วย @Component, @Service, @Repository เป็นต้น คลาสเหล่านี้จะถูกลงทะเบียนเป็น bean ในคอนเทนเนอร์ Spring
  3. @Autowired : คำอธิบายประกอบนี้อนุญาตให้ Spring แก้ไขและแทรกการอ้างอิงโดยอัตโนมัติ สามารถใช้กับฟิลด์ ตัวสร้าง และวิธีการ
  4. @RestController : คำอธิบายประกอบนี้ใช้เพื่อทำเครื่องหมายคลาสเป็นตัวควบคุมโดยที่เมธอด @RequestMapping จะส่งคืนวัตถุโดเมนแทนที่จะเป็นมุมมอง เป็นคำอธิบายประกอบเพื่อความสะดวกที่รวม @Controller และ @ResponseBody
  5. @RequestMapping : คำอธิบายประกอบนี้ใช้เพื่อแมปคำขอ HTTP กับวิธีการจัดการเฉพาะ สามารถใช้ได้ทั้งในระดับคลาสและเมธอด
  6. @Service : คำอธิบายประกอบนี้เป็นความเชี่ยวชาญพิเศษของ @Component คำอธิบายประกอบ มันไม่ได้เพิ่มพฤติกรรมพิเศษใด ๆ เหนือคำอธิบายประกอบ @Component อย่างไรก็ตาม เป็นแนวปฏิบัติที่ดีในการทำเครื่องหมายคลาสบริการด้วย @Service
  7. @Repository : คำอธิบายประกอบนี้เป็นเครื่องหมายสำหรับคลาสใดๆ ที่ตอบสนองบทบาทของพื้นที่เก็บข้อมูลหรือ Data Access Object (DAO) คำอธิบายประกอบนี้มีคุณสมบัติการแปลอัตโนมัติสำหรับข้อยกเว้นที่เกี่ยวข้องกับฐานข้อมูล

เรามาดำดิ่งสู่การทำแอพเพื่อทำความเข้าใจการใช้งานคำอธิบายประกอบเหล่านี้

2. การทำแอพ Spring Boot

เพื่อแสดงการใช้คำอธิบายประกอบเหล่านี้ เราจะทำแอพ Spring Boot อย่างง่าย เป็นแอปพลิเคชันร้านหนังสือที่เราสามารถเพิ่ม ดู อัปเดต และลบหนังสือได้

ก่อนอื่นมาสร้างโครงการของเราโดยใช้ Spring Initializr เลือก Maven เป็นโครงการของคุณ เพิ่ม ‘Web’, ‘JPA’ และ ‘H2’ เป็นการอ้างอิงของคุณ และสร้างโครงการของคุณ

การตั้งค่าคลาสแอปพลิเคชันหลัก (Main Application Class)

ขั้นแรก เราจะตั้งค่าคลาสแอปพลิเคชันหลักของเรา นี่คือจุดเริ่มต้นของ Spring Boot Application ของเรา

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BookstoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(BookstoreApplication.class, args);
    }

}

ที่นี่ ใช้คำอธิบายประกอบ @SpringBootApplication ซึ่งเป็นคำอธิบายประกอบ (Annotations) อำนวยความสะดวกที่เพิ่มสิ่งต่อไปนี้ทั้งหมด:

  • @Configuration : ทำเครื่องหมายคลาสเป็นแหล่งที่มาของคำจำกัดความของถั่ว
  • @EnableAutoConfiguration : บอกให้ Spring Boot เริ่มเพิ่ม bean ตามการตั้งค่า classpath, bean อื่นๆ และการตั้งค่าคุณสมบัติต่างๆ
  • @ComponentScan : บอกให้ Spring ค้นหาส่วนประกอบ การกำหนดค่า และบริการอื่นๆ ในแพ็คเกจ ‘com/example’ เพื่อให้ค้นหาตัวควบคุม

การตั้งค่าโมเดล (Model)

ตอนนี้เรามาสร้างโมเดลหนังสือกัน

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String title;
    private String author;
    
    // getters and setters
}

ที่นี่ @Entity ใช้เพื่อระบุว่าคลาสนี้เป็นเอนทิตี JPA สำหรับชั้นหนังสือ JPA จะแปลเป็นตารางที่เรียกว่า ‘book’ โดยอัตโนมัติ @Id ใช้เพื่อกำหนดคีย์หลัก และ @GeneratedValue ใช้เพื่อเปิดใช้งานโหมดการเพิ่มอัตโนมัติ

การสร้างพื้นที่เก็บข้อมูล (Repository)

ต่อไป มาสร้างที่เก็บสำหรับโมเดลหนังสือของเรากัน

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BookRepository extends CrudRepository<Book, Long> {
}

ที่นี่ @Repository ใช้เพื่อระบุว่าเป็น Data Access Object (DAO) CrudRepository เป็นอินเทอร์เฟซข้อมูล Spring สำหรับการดำเนินการ CRUD ทั่วไป

การสร้างบริการ (Service)

ตอนนี้ เราสร้างคลาสบริการที่ใช้พื้นที่เก็บข้อมูลของเราเพื่อดำเนินการกับโมเดลหนังสือ

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

import java.util.List;

@Service
public class BookService {

    private final BookRepository bookRepository;

    @Autowired
    public BookService(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    public List<Book> getAllBooks() {
        return (List<Book>) bookRepository.findAll();
    }

    // other CRUD operations here
}

ที่นี่ @Service ใช้เพื่อระบุว่าเป็นคลาสบริการ @Autowired ใช้เพื่อแทรกอินสแตนซ์ BookRepository ลงใน BookService ของเราโดยอัตโนมัติ

การสร้างคอนโทรลเลอร์ (Controller)

สุดท้าย เราสร้างคลาสคอนโทรลเลอร์ที่จัดการคำขอและการตอบสนอง HTTP

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/api/books")
public class BookController {

    private final BookService bookService;

    @Autowired
    public BookController(BookService bookService) {
        this.bookService = bookService;
    }

    @GetMapping
    public List<Book> getAllBooks() {
        return bookService.getAllBooks();
    }

    // other HTTP request mappings here
}

ในคลาสนี้ @RestController ใช้เพื่อระบุว่าเป็นตัวควบคุมบริการเว็บ RESTful @RequestMapping(“/api/books”) ใช้เพื่อแมปคำขอ HTTP กับ /api/books กับคอนโทรลเลอร์นี้ @Autowired ใช้เพื่อแทรกอินสแตนซ์ BookService ลงใน BookController ของเราโดยอัตโนมัติ @GetMapping ใช้เพื่อจัดการคำขอ HTTP GET


คำอธิบายประกอบ (Annotations) เป็นส่วนสำคัญของการทำแอพ Spring Boot ช่วยปรับปรุงโค้ดและกำจัดสำเร็จรูปจำนวนมากที่เกี่ยวข้องกับการกำหนดค่า ด้วยคำอธิบายประกอบ (Annotations) คุณสามารถมุ่งเน้นที่ตรรกะทางธุรกิจได้มากขึ้นและน้อยลงในการตั้งค่าและการกำหนดค่า การสำรวจคำอธิบายประกอบ (Annotations) Spring Boot ที่พบมากที่สุดบางส่วนนี้ หวังว่าจะช่วยให้คุณเข้าใจวิธีการทำงานและวิธีการใช้อย่างมีประสิทธิภาพเพื่อทำแอพของคุณ


Spring Boot คืออะไร

Spring Boot คือ ตอนที่ 4 : การกำหนดค่าอัตโนมัติ (Auto-Configuration)
Spring Boot คือ ตอนที่ 6 : สปริงบูตแอคทูเอเตอร์ (Actuator)