+2

Spring Boot In Action: Beans

Mayfest2023

I. Introduction

Thực tế Spring Boot là một framework lớn và phức tạp, sử dụng rất nhiều abstraction nên việc hiểu được các khái niệm của nó không phải là điều dễ dàng gì. Nhưng cũng vì có nhiều abstraction layer nên chúng ta chỉ việc tuân theo Hollywood Priciple của nó để đỡ phải mất công reinventing the wheel và có nhiều thời gian hơn để build những gì chúng ta thích.

Don't call us, we'll call you

Chúng ta có thể thực hiện việc kết nối đến MySQL database như ví dụ sau bằng cách tuân theo những tiêu chuẩn có sẵn của Spring Boot mà thậm chí còn không biết khái niệm port trong khoa học máy tính là cái gì =)). Spring Boot bảo là cậu cứ làm theo chỉ dẫn của tớ là mọi việc sẽ đâu vào đấy.

1. Step 1

Cậu hãy tạo Configuration đi.

application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_name
    username: db_username
    password: db_password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    database-platform: org.hibernate.dialect.MySQLDialect

2. Step 2

Sau khi có Configuration thì cậu hãy tạo bean để lúc nào cần còn dùng.

UserRepository.java

import org.springframework.data.jpa.repository.JpaRepository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // Define additional methods for custom database operations if needed
}

3. Step 3

Autowired depedency vào và sử dụng thôi. That's it.

UserService.java

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

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    // Use the repository methods for performing database operations
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
}

II. Analogy

Khi mới bắt đầu với Spring Boot, chúng ta hoàn toàn làm được những cái này thông qua một vài tutorial trên mạng nhưng có thể phần lớn trong số chúng ta cảm thấy khá lúng túng và khó hiểu. Hy vọng là qua analogy sau đây mọi người sẽ hiểu hơn về về ví dụ nêu trên.

Hãy hình dung về một người nông dân có một cánh đồng hoa màu. Người nông dân này chịu trách nhiệm gieo hạt, tưới nước và thu hoạch sau khi cây đã lớn. Nói chung là quản lý cánh đồng hoa màu đó. Khi đối chiếu với ứng dụng Spring Boot thì:

  • Người nông dân là Spring Boot application.
  • Cánh đồng là Application Context/IoC Container.
  • Cây trồng/hoa màu là Spring Boot's beans.
  • Các công cụ giúp người nông dân làm việc với cây trồng là depedencies.

Người nông dân gieo hạt (configurations/beans) trên cánh đồng (Application Context). Hạt phát triển thành cây trồng (beans) mà người nông dân sau đó có thể thu hoạch và sử dụng (inject depedency into other beans). Người nông dân sau đó lại cùng các công cụ (depedencies) để lại tiếp tục quá trình đó.

Trong ví dụ trên, quá trình gieo hạt chính là khai báo Configuration file và sau khi khai báo UserRepository sử dụng file này thì chúng ta có cây trồng hoàn chỉnh (bean). Khi đã có cây trồng (tức là bean đã tạo thành) thì việc thu hoạch và sử dụng chính là việc autowired UserRepository vào UserService, nó cho phép việc thao tác/tạo sự thay đổi trên cơ sở dữ liệu.

Thông qua ví dụ trên chúng ta có thể rút ra được một số đặc tính của beans như sau:

1. Beans là objects thông thường

Ngày trước các cây trồng mọc đan xen vào nhau trên cánh đồng khó khăn cho việc phát triển và thu hoạch thì ngày nay cũng là những cây trồng đấy nhưng với sự trợ giúp của Spring Boot thì các cây trồng được phân bổ ngay hàng thẳng lối, phân loại rõ ràng tạo điều kiện cho hệ thống máy móc có thể hỗ trợ tối đa trong quá trình phát triển.

2. Có nhiều cách khởi tạo beans khác nhau

Có nhiều cách khởi tạo beans khác nhau tương ứng với nhiều cách gieo hạt khác nhau, có thể đến từ file .xml hay từ Java class annotated với @Component chẳng hạn..

image.png

image.png

3. Beans được tạo ra và quản lý bởi container

Thay vì một cánh đồng được quản lý thủ công thì ngày nay các quy trình và hệ thống tự động sẽ giúp chúng ta làm những việc đó. Những hệ thống này chính là IoC Container trong Spring Boot.

4. Beans có thể được inject vào những beans khác

Từ những loại cây trồng khác nhau chúng ta có thể sử dụng để lai giống thành một loại mới. Trong ví dụ trên đó chính là việc inject bean UserRepository vào UserService. Việc inject này cũng sẽ được làm một cách tự động bởi Spring Boot.

image.png

Nói tóm lại thì người nông dân ngày xưa phải làm rất nhiều việc để quản lý cách đồng của mình nhưng với Spring Boot thì mọi thứ được đơn giản và hiệu quả hơn rất nhiều...

III. References

===

Thanks for reading.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí