Nếu bạn đang học Spring hoặc Spring Boot, bạn sẽ thường xuyên nghe thấy các thuật ngữ như:
@Component
,@Autowired
,@Bean
- Spring container
- Dependency Injection (DI)
- Beans
Nhưng thực sự chúng có ý nghĩa gì? Tại sao chúng được sử dụng? Và làm cách nào chúng giúp ứng dụng của bạn trở nên sạch sẽ, mô-đun hóa và mạnh mẽ hơn?
Trong bài viết này, chúng ta sẽ phân tích những khái niệm này theo cách đơn giản nhất.
Annotation trong Spring là gì?
Trong Spring, annotation là những ký hiệu đặc biệt (bắt đầu bằng ký tự @) nhằm báo cho framework Spring thực hiện một hành động nào đó một cách tự động.
✨ Một số annotation phổ biến:
Bean là gì?
Trong Spring, Bean là một đối tượng Java được Spring container quản lý.
Ví dụ:
@Component
public class MyService { public void greet() { System.out.println("Hello from MyService!"); }
}
Class MyService
trở thành một Spring Bean vì nó được đánh dấu bằng @Component
.
Spring Container là gì?
Spring Container là lõi của framework Spring. Nó chịu trách nhiệm:
- Tạo ra các đối tượng (beans)
- Quản lý vòng đời của chúng
- Tiêm dependencies vào chúng
- Cấu hình chúng dựa vào annotation hoặc XML
Hãy hình dung container giống như bộ não điều khiển toàn bộ ứng dụng Spring của bạn.
Cách hoạt động:
Khi ứng dụng khởi động:
- Spring quét các class có annotation như @Component, @Service
- Tạo đối tượng và lưu vào bộ nhớ
- Kết nối các thành phần với nhau một cách tự động
Dependency Injection (DI) là gì?
Dependency Injection là kỹ thuật cung cấp (tiêm) các phụ thuộc (dependencies) từ bên ngoài, thay vì để đối tượng tự tạo chúng.
Không dùng DI:
MyService service = new MyService(); // Tight coupling
Với DI trong Spring:
@Autowired
MyService service; // Loose coupling
Spring sẽ tự tạo đối tượng MyService
và inject nó vào nơi cần thiết.
Tại sao nên dùng Dependency Injection?
- Liên kết lỏng lẻo – dễ kiểm thử và bảo trì
- Tăng khả năng mô-đun
- Code sạch hơn, không cần nhiều từ khóa new
Spring thực hiện DI như thế nào?
Spring hỗ trợ 3 hình thức Dependency Injection:
VD:
@Component
public class Car { private Engine engine; @Autowired public Car(Engine engine) { this.engine = engine; }
}
Spring sẽ tự động tạo bean Engine
và tiêm nó vào Car
.
Khi nào nên dùng Annotation & DI trong Spring?
Kết luận
Hiểu rõ về annotation, bean, Spring container và dependency injection là nền tảng để bạn trở thành một lập trình viên Spring Boot vững vàng.
Những kiến thức này giúp bạn:
- Viết ứng dụng sạch sẽ, dễ kiểm thử và dễ mở rộng
- Tập trung vào logic nghiệp vụ thay vì code mẫu lặp đi lặp lại
- Xây dựng những dự án lớn với ít nỗ lực hơn nhưng vẫn đảm bảo chất lượng cao
🔔 Học một lần, dùng mãi trong mọi dự án backend của bạn.