日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Spring源碼之Bean實例化基本原理

創(chuàng)建Spring Bean實例化是Spring Bean生命周期的第一階段

Bean的生命周期主要有如下幾個步驟:

「詳細介紹:Spring In Action是這樣講的:」

  • 實例化Bean對象,這個時候Bean的對象是非常低級的,基本不能夠被我們使用,因為連最基本的屬性都沒有設(shè)置,可以理解為連Autowired注解都是沒有解析的;
  • 填充屬性,當(dāng)做完這一步,Bean對象基本是完整的了,可以理解為Autowired注解已經(jīng)解析完畢,依賴注入完成了;
  • 如果Bean實現(xiàn)了BeanNameAware接口,則調(diào)用setBeanName方法;
  • 如果Bean實現(xiàn)了BeanClassLoaderAware接口,則調(diào)用setBeanClassLoader方法;
  • 如果Bean實現(xiàn)了BeanFactoryAware接口,則調(diào)用setBeanFactory方法;
  • 調(diào)用BeanPostProcessor的postProcessBeforeInitialization方法;
  • 如果Bean實現(xiàn)了InitializingBean接口,調(diào)用afterPropertiesSet方法;
  • 如果Bean定義了init-method方法,則調(diào)用Bean的init-method方法;
  • 調(diào)用BeanPostProcessor的postProcessAfterInitialization方法;當(dāng)進行到這一步,Bean已經(jīng)被準備就緒了,一直停留在應(yīng)用的上下文中,直到被銷毀;
  • 如果應(yīng)用的上下文被銷毀了,如果Bean實現(xiàn)了DisposableBean接口,則調(diào)用destroy方法,如果Bean定義了destory-method聲明了銷毀方法也會被調(diào)用。

在實例化Bean之前在BeanDefinition里頭已經(jīng)有了所有需要實例化時用到的元數(shù)據(jù),接下來Spring只需要選擇合適的實例化方法以及策略即可。

「BeanDefinition」

Spring容器啟動的時候會定位我們的配置文件,加載文件,并解析成Bean的定義文件BeanDefinition

右邊的Map里存儲這bean之間的依賴關(guān)系的定義BeanDefinition,比如OrderController依賴OrderService這種

實例化方法有兩大類分別是工廠方法和構(gòu)造方法實例化,后者是最常見的。其中Spring默認的實例化方法就是無參構(gòu)造函數(shù)實例化。

如我們在xml里定義的以及用注解標識的bean都是通過默認實例化方法實例化的

實例化方法

「使靜態(tài)工廠方法實例化」

 
 
 
 
  1. public class FactoryInstance { 
  2.  
  3.     public FactoryInstance() { 
  4.         System.out.println("instance by FactoryInstance"); 
  5.     } 
 
 
 
 
  1. public class MyBeanFactory { 
  2.  
  3.     public static FactoryInstance getInstanceStatic(){ 
  4.         return new FactoryInstance(); 
  5.     } 
 
 
 
 
  1.  
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
  4.  
  5.     
  6.           factory-method="getInstanceStatic"/> 
  7.  

「使用實例工廠方法實例化」

 
 
 
 
  1. public class MyBeanFactory { 
  2.  
  3.     /** 
  4.      * 實例工廠創(chuàng)建bean實例 
  5.      * 
  6.      * @return 
  7.      */ 
  8.     public FactoryInstance getInstance() { 
  9.         return new FactoryInstance(); 
  10.     } 
 
 
 
 
  1.   
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  
  4.     
  5. <sup id="k8uh2"></sup>

            1. <dfn id="k8uh2"></dfn>
              1. <dfn id="k8uh2"></dfn><th id="k8uh2"></th>