- vừa được xem lúc

Hiểu về Annotations, Bean, Spring Container & Dependency Injection trong Spring Boot

0 0 3

Người đăng: Thái Thịnh

Theo Viblo Asia

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: image.png

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: image.png

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?

image.png

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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

The Twelve-Factor App, cẩm nang gối đầu giường trong xây dựng application (Phần 1)

Giới thiệu. Ngày nay các phần mềm được triển khai dưới dạng các dịch vụ, chúng được gọi là các web apps hay software-as-a-service (SaaS).

0 0 45

- vừa được xem lúc

8 Sai lầm phổ biến khi lập trình Android

1. Hard code.

0 0 207

- vừa được xem lúc

Popular interview question: What is the difference between Process and Thread? 10 seconds a day

Video được đăng tại channel Tips Javascript

0 0 44

- vừa được xem lúc

Thuật toán và ứng dụng - P1

Mục đích series. . Những bài toán gắn liền với thực tế. Từ đó thấy được tầm quan trọng của thuật toán trong lập trình.

0 0 46

- vừa được xem lúc

Tác dụng của Docker trong quá trình học tập

Docker bây giờ gần như là kiến thức bắt buộc đối với các anh em Dev và Devops, nhưng mà đối với sinh viên IT nói chung vẫn còn khá mơ hồ và không biết tác dụng thực tế của nó. Hôm nay mình sẽ chia sẻ

0 0 52

- vừa được xem lúc

Làm giàu trong ngành IT

Hầu như mọi người đều đi làm để kiếm tiền, ít người đi làm vì thấy cái nghề đó thú vị lắm. Bây giờ vất cho mình 100 tỷ bảo mình bỏ nghề thì mình cũng bỏ thôi.

0 0 55