Dependency Injection và Inversion of Control trong Spring Framework

Dependency Injection và Inversion of Control trong Spring Framework

Dependency Injection và Inversion of Control trong Spring Framework là hai khái niệm khá trừu tượng và khó hiểu kể cả các lập trình viên mới và cố kinh nghiệm.Hiện có rất nhiều bài viết về Dependency Injection và Inversion of Control,mỗi người lại có một cách giải thích khác nhau.Tuy nhiên ở bài này,mình sẽ giải thích và tổng hợp cũng như cố gắng để các bạn dễ hiểu về hai khái niệm Dependency Injection và Inversion of Control này.

 

ioc-dependency injection


Khái niệm Dependency Injection và Inversion of Control

1.Inversion of control (IOC)

Inversion of control hay viết tắc của IOC đó chính là khả năng của Spring container trong việc quản lý các thành phần, khi mà thay vì một thành phần phải tự đòi hỏi các tài nguyên cho nó, thì nó sẽ được Spring container cung cấp các tài nguyên dựa vào thông tin trong file cấu hình.

2. Dependency Injection (DI)

Dependency Injection hay viết tắt của DI,là khả năng liên kết giữa các thành phần lại với nhau trong Spring, đó chính là việc các thuộc tính trong một đối tượng được “tiêm chích” để tham chiếu lần lượt đến các đối tượng khác được quản lý bởi Spring container.


Với Dependency Injection thì một đối tượng sẽ không phụ thuộc và đối tượng khác và đối tượng khác cũng vậy. Khi cần đối tượng này sẽ gọi tới đối tượng kia và ngược lại. Và mình đã hỏi các bạn, các đối tượng sẽ được tạo ra và nằm ở đâu để khi cần chúng có thể gọi lẫn nhau. Câu trả lời là chúng ta phải có một khung chứa, và khung chứa đó chính là một phần của IoC.

Ví dụ

Ví dụ về Dependency Injection

Để các bạn có thể hiểu hơn về DI mình sẽ viết một ví dụ như sau :

Đây là cách bạn tạo sự phụ thuộc đối tượng trong các chương trình truyền thống:

Trong ví dụ trên, bạn có thể thấy rằng,để nhanh chóng sự phụ thuộc item  của đối tượng Store, bạn phải xác định việc thực hiện giao diện Item nào chúng ta sẽ sử dụng trong lớp Store .

Bằng cách sử dụng DI, chúng ta có thể viết lại ví dụ mà không nêu rõ việc thực hiện của Item mà chúng ta muốn:

Việc triển khai Item được Injection (tiêm) sẽ được cung cấp thông qua metadata.

phan-biet-setter-va-constructor-injection-trong-spring
phan-biet-setter-va-constructor-injection-trong-spring

Với Dependency Injection (DI) thì chúng ta có hai cách để Injection data.Đó chính là :

  • Setter Injection

  • Constructor Injection

Để hiểu rõ hơn về khái niệm này,các bạn có thể đọc bài viết chi tiết tại đây. 

Chúng ta sẽ cùng nhau tìm hiểu về ví dụ hai khái niệm trên :

  • Sử dụng Setter Injection

User.java

mvc-dispatcher-servlet.xml

TestController.java

Output: itphutran null

  • Sử dụng Constructor Injection

Tương tự chúng ta cũng có những file cấu hình trên,tuy nhiên cần phải thay đổi trong file mvc-dispatcher-servlet.xml.

mvc-dispatcher-servlet.xml

Output:1, itphutran ,password.

Tổng kết :

Qua những khái niệm và ví dụ trên,bạn đọc cũng đã hiểu hơn về Dependency Injection và Inversion of Control trong Spring Framework.Hy vọng sẽ giúp ích cho các bạn ứng dụng và phát triển các project sau này.Share bài viết để mọi người cùng đọc nhé.