Kế thừa bean trong Spring

Trong Java chúng ta có kế thừa đối tượng sử dụng từ khóa abstract, Spring cũng hỗ trợ chúng ta làm điều tương tự trong bản thân nó. Bài viết này mình sẽ trình bày cho các bạn biết cách để sử dụng kế thừa bean trong Spring như thế nào?

OK, đầu tiên chúng ta cần phải có một Maven project để làm việc. Mình đã tạo Maven project như sau:

Trong đó, Spring framework dependency như sau:

Clazz class:

Application class:

Để có thể sử dụng kế thừa, ít nhất các bean được khai báo trong khung chứa của Spring phải có một đặc điểm chung nào đó. Vì thế mình trong class Clazz ở trên, mình đã khai báo một field làm đặc điểm chung cho tất cả các bean đó là tên trường, schoolName.

Trong Spring container, mình khai báo khởi đầu như sau:

OK, bây giờ mình sẽ khai báo thêm một bean chung cho tất cả các đối tượng Clazz có cùng tên trường “Tam Quan Nam” như sau.

Để bean clazzA và bean clazzB có thể sử dụng bean chung trên chúng ta cần khai báo thêm thuộc tính parent với giá trị là id của bean chung, trong phần khai báo của bean clazzA và bean clazzB, như sau:

Bây giờ nếu chạy chương trình, các bạn sẽ thấy kết quả như sau:

Các bạn có thể thấy, mặc dù chúng ta không khai báo field schoolName cho bean clazzA nhưng bean clazzA vẫn có tên trường vì nó được kế thừa từ bean generalClazz.

Cũng cần nói thêm rằng trong trường hợp này bean generalClazz của chúng ta cũng được khởi tạo trong khung chứa của Spring và chúng ta có thể lấy ra nó:

Kết quả:

Nếu các bạn muốn nó chỉ là một abstract như định nghĩa trong Java, nghĩa là không thể khởi tạo được trong khung chứa của Spring, chúng ta có thể khai báo thêm thuộc tính abstract=”true”:

Trong trường hợp này, nếu các bạn chạy lại đoạn code trên, sẽ gặp ngay lỗi sau:

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

5 thoughts on “Kế thừa bean trong Spring

  1. nếu mình không nhầm thì code này của bạn in kết quả ra null đó chứ có in được ra Tam Quan Nam đâu. chắc chắn đấy

  2. a cho e hỏi trong trường hợp này sao lại là kế thừa ạ ,vì đây bản chất là 2 đối tượng của cùng 1 class ,cái này kiểu như chỉ share chung dữ liệu thôi chứ a ,nó giống biến static . K biết e suy nghĩ vậy có phải không

Add Comment