spring如何初始化一個bean

我們都知道,在創建一個spring應用的時候,通過構建spring容器,根據容器獲取bean,那麼spring是如何創建bean的呢?首先在創建bean容器時,通過上下文也就是非BeanFactory創建時,被標記的java對象就會在容器創建時被創建,如代碼所示:

ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
IAccountDao adao = ac.getBean("accountDao",IAccountDao.class);

其中依賴注入也在這時候完成,需要注意的是,spring初始化bean是需要步驟的,這個過程類似jvm的類加載機制

1. bean的生命週期

1.1 BeanDefinition

在這裏插入圖片描述
對於一個普通類的實例化過程,當啓動jvm時,代表該類的字節碼文件被加載進內存中,在方法區生成代表這個類的唯一class模板,並通過這個模板在堆中生成對象,但是bean實例化過程卻沒有這麼簡單:
在這裏插入圖片描述
假如在X類上加了@XXX之類的註解,使之能被spring掃描並創建,按道理應該創建X的對象放入spring容器中,其實該不該創建並不能確切的知道,比如該類被設置爲懶加載或者是prototype類型的就不會立即創建對象,雖然不會創建對象,但spring會創建BeanDefinition的子類來存儲X類的信息,比如名字,描述信息等,讓後將該對象放進map中

1.2 bean的產生

運行我們的java程序,通過xml文件或者註解的方式都會創建我們的bean容器,這個容器首先會將xml文件中的bean標籤或者被註解的類放進去,那麼這個時候會不會new一個對象呢?答案是不確定的,比如該類被設置爲懶加載或者是prototype類型的,所以spring會先對它進行解析parse,將解析的類放進GenericBeanDefinition這個對象中,並且設置該類的屬性:
在這裏插入圖片描述
通過一系列設置值過後,spring就會根據名稱將這個BeanDefinition對象放進map和list中
在這裏插入圖片描述

1.3 bean的生命週期哪個階段完成依賴注入

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章