Spring Boot In Action: Beans
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..
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.
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