Dependency Injection và Inversion of Control trong Spring Framework

Written by IT Phú Trần on 30/03/2017 in Câu hỏi phỏng vấn and LẬP TRÌNH JAVA and LẬP TRÌNH SPRING MVC with 19 comments.

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à :

Để 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 :

User.java

mvc-dispatcher-servlet.xml

TestController.java

Output: itphutran null

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é.

 

 

19 Responses to “Dependency Injection và Inversion of Control trong Spring Framework

  1. Attractive section of content. I just stumbled upon your website and
    in accession capital to assert that I acquire actually enjoyed account your blog posts.

    Anyway I’ll be subscribing to your augment and even I achievement you
    access consistently quickly.

  2. Hey! This is my first visit to your blog! We are a team of
    volunteers and starting a new project in a community in the same niche.
    Your blog provided us useful information to work on. You have done a outstanding job!

  3. Good day! Do you know if they make any plugins to assist with Search Engine
    Optimization? I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very good gains.

    If you know of any please share. Appreciate
    it!

  4. Superb blog! Do you have any recommendations for aspiring writers?
    I’m hoping to start my own site soon but I’m a little lost on everything.
    Would you recommend starting with a free platform like
    Wordpress or go for a paid option? There are so many choices out
    there that I’m totally confused .. Any tips?
    Thanks!

  5. Having read this I thought it was really enlightening. I appreciate you spending some time and energy to put this short article
    together. I once again find myself spending a lot of time both reading and commenting.

    But so what, it was still worth it!

  6. Greetings from Florida! I’m bored to tears at work so I decided to
    check out your site on my iphone during lunch break. I really like the information you provide here and can’t wait to take a look when I
    get home. I’m amazed at how quick your blog loaded on my phone ..

    I’m not even using WIFI, just 3G .. Anyways, awesome blog!

  7. Howdy very nice web site!! Man .. Excellent .. Amazing ..
    I’ll bookmark your website and take the feeds also? I’m
    happy to seek out numerous useful info right here in the put up,
    we want develop extra techniques in this regard, thank you for sharing.
    . . . . .

  8. Fantastic website. A lot of helpful info here. I’m sending it to several friends ans also sharing in delicious.
    And certainly, thank you in your sweat!

  9. Hi there! I know this is kind of off topic but I was wondering if you knew where I could get a captcha
    plugin for my comment form? I’m using the same blog platform as yours and I’m having difficulty finding one?
    Thanks a lot!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *