Constructor Injection với overloaded constructor trong Spring

Trong bài viết trước, mình đã giới thiệu với các bạn về Constructor Injection trong Spring. Nhưng bởi vì chúng ta có thể khai báo constructor cho một object theo nhiều cách khác nhau, nên trong bài viết này mình xin nói rõ thêm cho các bạn biết làm thế nào để khởi tạo đối tượng trong Spring container theo các cách khác nhau đó.

Hãy xem xét ví dụ sau nhé:

Như các bạn thấy, đối tượng Student của mình có ba constructor, hai trong số đó là overload. Bây giờ chúng ta hãy xem xét từng trường hợp cụ thể nhé!

Nhưng trước tiên, mình cần tạo Maven project trước:

Constructor Injection với overloaded constructor trong Spring
Mình sẽ sử dụng Java 17 cho ứng dụng ví dụ này:

Spring dependency như sau:

Class Application có nội dung như sau:

OK, bắt đầu nào.

Đối với những overloaded constructor, chúng ta cần chỉ rõ loại dữ liệu của các tham số trong từng constructor các bạn ạ!

Ví dụ giờ mình cần khởi tạo đối tượng Student với tên là “Khanh”. Mình sẽ khai báo trong khung chứa của Spring như sau:

Với cách khai báo này, Spring sẽ gọi đến constructor

để khởi tạo đối tượng Student bởi vì biến name ở đây kiểu dữ liệu là String.

Kết quả:

Constructor Injection với overloaded constructor trong Spring

Nếu bây giờ mình cần khởi tạo đối tượng Student với tuổi là 30, thì mình cần thay đổi kiểu dữ liệu, cụ thể như sau:

Lúc này, Spring sẽ gọi đến constructor

để khởi tạo đối tượng Student và kết quả sẽ như sau:

Constructor Injection với overloaded constructor trong Spring

Đối với những constructor có nhiều tham số, chúng ta có thể khai báo chúng như bình thường:

5/5 - (1 bình chọn)

6 thoughts on “Constructor Injection với overloaded constructor trong Spring

  1. Có vẻ đã đầy đủ, nhưng ngược lại còn một số trường hợp có thể gây lỗi nên tránh:
    Nếu thêm 1 field như sau:
    private String address;
    public Student(String address, int age) {
    this.address = address;
    this.age = age;
    }
    Thế này thì 2 trường hợp cuối có thể gây lỗi vì ko tìm dc bean thích hợp 🙂

    1. @Thinh Au: Mình không nghĩ có khả năng tồn tại 2 overload có cùng type và order như vầy được:
      public Constructor(String name, int age) { }
      public Constructor(String address, int age) { }
      Ngay tại compile time la` exception rồi, không cần đến runtime đâu anh Khanh nhĩ 🙂

    1. Khai báo type chỉ trong trường hợp mình có nhiều constructor overload thôi em. Trong ví dụ của anh, không có overload nên anh chỉ cần khai báo như vậy là được.

Add Comment