Spring容器中的Bean加載過程分為以下幾個階段:
定位:Spring通過讀取配置文件(如XML、注解或JavaConfig)來確定需要加載的Bean。根據配置文件中定義的路徑或包名,Spring會掃描并定位到相應的Bean定義。
加載:一旦定位到Bean定義,Spring會使用適當的類加載器加載對應的Bean類。這個過程中,Spring會使用Bean的元數據(如類的全限定名、實現的接口等)來創建一個BeanDefinition對象,記錄Bean的信息。
實例化:當Bean的定義被加載完畢后,Spring會實例化這個Bean。根據Bean的作用域,實例化的方式可以是單例(Singleton)或原型(Prototype)。對于單例Bean,實例化只會發生一次,而原型Bean每次獲取時都會創建一個新的實例。
屬性注入:在實例化完成后,Spring會通過依賴注入的方式來設置Bean的屬性。依賴注入可以通過構造方法、Setter方法或直接的字段注入來完成。
初始化:一旦Bean的屬性被設置完成,Spring會調用Bean的初始化方法(如@PostConstruct注解標記的方法)進行一些必要的初始化操作。
銷毀:當容器關閉或者Bean被銷毀時,Spring會調用Bean的銷毀方法(如@PreDestroy注解標記的方法)進行一些清理工作。
在整個加載過程中,Spring會根據Bean的依賴關系自動解決依賴,并確保Bean的初始化順序正確。同時,Spring還支持AOP和其他擴展機制,可以在加載過程中對Bean進行增強或處理。