Nhảy tới nội dungKế thừa trong Java:
- Class extends 1 class duy nhất.
- Interface extends nhiều interface.
- Class implement nhiều interface.
- Thực tế Java có hỗ trợ đa kế thừa theo kiểu 1 con nhiều cha – 1 lớp implement nhiều interface. Cụ thể nó gọi là behavioral inheritance – Kế thừa hành vi. Vì Interface thì chỉ có các hàm thôi (Tất nhiên là không tính default variable và default function – Nó giống static hơn). Về mặt thiết kế thì đây vẫn coi là kế thừa. Nghĩa là việc implement interface có thể hiện kế thừa (Có tài liệu chính thức của Oracle xác nhận).
- Nguyên nhân tại sao lại không có việc 1 class extends được nhiều class thì có thể gói gọn trong 1 câu là ambiguity diamond problem. Trước đó C++ đã cho phép điều này, nhưng khi extends nhiều class, khi class con dùng lại phương thức của class cha A và B, thì giả dụ nếu A và B cùng có một phương thức là run(). Thì khi kế thừa, class con không biết phải sử dụng phương thức run() của A hay của B. Và Java chọn xử lý vấn đề này bằng cách không cho phép extends nhiều class.
Spring IoC, DI và StereoType.
- @ComponentScan là annotation chỉ định ứng dụng Spring sẽ scan các component ở đâu. Và nó có một vài overload. Nếu không khai báo tham số gì, mặc định nó sẽ quét các các class/interface cùng package và các sub-package nằm trong package chứa class khai báo @ComponentScan. Nếu có truyền thêm package cụ thể thì nó sẽ chỉ quét trong package đó, và có thể truyền một danh sách để quét nhiều package
- @ComponentScan sẽ quét tất cả các class/interface được đánh dấu với các annotation StereoType.
- Mặc đinh, @SpringBootApplication đã có @ComponentScan
- @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan