可以不要問我Spring Bean的生命週期嗎

是的,Spring Bean的生命週期只有這四個階段。把這四個階段和每個階段對應的擴展點糅合在一起雖然沒有問題,但是這樣非常凌亂,難以記憶。要徹底搞清楚Spring的生命週期,首先要把這四個階段牢牢記住。實例化和屬性賦值對應構造方法和setter方法的注入,初始化和銷燬是用戶能自定義擴展的兩個階段。在這四步之間穿插的各種擴展點,稍後會講。

1,實例化 Instantiation
2,屬性賦值Populate
3,初始化Initialization
4,銷燬Destruction

實例化-》屬性賦值-》初始化-》銷燬

主要邏輯都在doCreate()方法中,邏輯很清晰,就是順序調用以下三個方法,這三個方法與三個生命週期階段一一對應,非常重要,在後續擴展接口分析中也會涉及。

1.createBeanInstance()–》實例化
2,populateBean()–》屬性賦值
3,initialzeBean()–》初始化

源碼如下,能證明實例化

// 忽略了無關代碼
protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)
      throws BeanCreationException {

   // Instantiate the bean.
   BeanWrapper instanceWrapper = null;
   if (instanceWrapper == null) {
       // 實例化階段!
      instanceWrapper = createBeanInstance(beanName, mbd, args);
   }

   // Initialize the bean instance.
   Object exposedObject = bean;
   try {
       // 屬性賦值階段!
      populateBean(beanName, mbd, instanceWrapper);
       // 初始化階段!
      exposedObject = initializeBean(beanName, exposedObject, mbd);
   }

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