Khởi tạo các đối tượng trong Spring container sử dụng tập tin XML

Bài viết này mình xin hướng dẫn cho các bạn biết cách cơ bản nhất để khởi tạo các đối tượng trong Spring container, đó chính là sử dụng tập tin XML các bạn nhé!

Mình xin lấy lại cái ví dụ mà mình đã đưa ra trong bài viết Hiểu về Dependency Injection.

Ở đây, mình có một interface tên là Shape:

Một đối tượng hiện thực interface Shape là Circle:

Đối tượng Drawing dùng để vẽ:

Một tập tin cấu hình của Spring nằm trong thư mục src/main/resources với nội dung ban đầu như sau:

Và bên dưới là Maven project của mình:

Khởi tạo các đối tượng trong Spring container sử dụng tập tin XML

Để làm việc với Spring framework thì chúng ta cần phải thêm dependency của nó vào tập tin pom.xml:

OK, bây giờ chúng ta sẽ khởi tạo đối tượng Circle trước các bạn nhé! Vì đối tượng này không phụ thuộc vào đối tượng khác nên chúng ta chỉ cần khởi tạo nó với một id trong Spring container:

Đến đối tượng Drawingở đây đối tượng Drawing có phụ thuộc vào đối tượng Circle mà chúng ta đã tạo ra trong Spring container, do đó chúng ta cần có cách để đưa đối tượng Circle vào đối tượng Drawing.

Như các bạn thấy trong code của Drawing, chúng ta có thể đưa đối tượng Circle vào đối tượng Drawing bằng hai cách: bằng constructor hoặc bằng phương thức setShape(). Vậy trong Spring mình sẽ làm điều này như thế nào?

Đầu tiên, các bạn sẽ khai báo đối tượng Drawing mà chưa đưa các phụ thuộc của nó vào, các bạn có thể khai báo nó giống như khởi tạo đối tượng Circle:

Rồi bây giờ mình sẽ đưa đối tượng Circle vào đối tượng Drawing bằng constructor, cái này tiếng Anh có thể gọi là Constructor Injection.

Hoặc là bằng phương thức setShape(), tiếng Anh có thể gọi là Setter Injection.

Đối với cách này, đối tượng Drawing của bạn phải khai báo thêm một constructor mặc định bởi vì Spring sẽ dùng constructor này để khởi tạo đối tượng Drawing, nghĩa là lớp Drawing phải viết lại như sau:

Giờ chúng ta có thể đưa đối tượng Circle vào như sau:

Các bạn có thể sử dụng một trong hai cách trên tùy theo code của bạn.

Giờ chúng ta hãy chạy thử xem, ở đây mình sẽ chọn Setter Injection cho đối tượng Drawing, chi tiết tập tin cấu hình của Spring như sau:

Và ví dụ để chạy:

Kết quả:

3.3/5 - (3 bình chọn)

11 thoughts on “Khởi tạo các đối tượng trong Spring container sử dụng tập tin XML

  1. Hàm setShape(Shape shape) trong lớp Drawing có phải là thừa không anh.
    Vì em thấy trong xml anh khai báo “” nên sẽ tự hiểu đối tượng shape của lớp Drawing.

  2. Bây giờ có thêm 1 lớp nữa impl Shape, rồi gán setter vào Drawing. Vậy là trong bean có 2 setter, lúc gọi thì nó dùng cái nào?

  3. Giờ em mún làm ví dụ này trong Spring Boot thì làm thế nào hả anh :D. Em không biết phải code dòng này “ApplicationContext context = new ClassPathXmlApplicationContext(“spring.xml”);
    ” như thế nào trong SpringBoot.
    Cám ơn anh đã đọc tin.

    1. Spring Boot hỗ trợ chúng ta khởi tạo bean sử dụng các annotation, em không cần phải khai báo trong tập tin XML. Do đó, em không cần phải khai báo dòng code trên nữa.

      Anh sẽ cố gắng viết một bài cơ bản về Spring Boot. Em chờ đón đọc nhé!

      Cảm ơn em đã ủng hộ Hướng Dẫn Java!

  4. anh ơi, ví dụ trên là output ra chữ Drawing circle, em giả sử có thêm 1 class tam giác cũng implement Shap thì output là gì hả anh. vì ở ví dụ trên chỉ có mỗi circle cài đặt Shape

    1. Nếu em có thêm đối tượng Triangle implement interface Shape thì em có thể khai báo đối tượng này trong khung chứa của Spring, rồi sau đó dùng attribute ref để gán nó vào đối tượng Drawing bằng constructor hoặc setter cũng được.
      Khi đó, output nó sẽ là cho đối tượng Triangle em nhé.

Add Comment