自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

初始化容器與 DefaultListableBeanFactory

開發(fā) 前端
本文從入口開始,進(jìn)入到構(gòu)造,主要介紹了 DefaultListableBeanFactory 的創(chuàng)建,及創(chuàng)建時(shí)初始化了一堆參數(shù)。

 [[355480]]

前言

 

在前一篇文章:創(chuàng)建 IoC 容器的幾種方式中,介紹了四種方式,這里以 AnnotationConfigApplicationContext 為例,跟進(jìn)代碼,看看 IoC 的啟動(dòng)流程。

1入口

從 JavaConfig 中加載配置的 AnnotationConfigApplicationContext 啟動(dòng)方式如下:

 

進(jìn)去之后發(fā)現(xiàn)構(gòu)造其實(shí)是調(diào)用的當(dāng)前無參構(gòu)造。

 

所以在啟動(dòng)時(shí)也可以直接聲明無參構(gòu)造,改寫為下面這種:

  1. public class AnnotationConfigApplicationTest { 
  2.  
  3.  public static void main(String[] args) { 
  4.  
  5.   AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); 
  6.  
  7.   context.register(JavaConfig.class); 
  8.   context.refresh(); 
  9.  
  10.   System.out.println(context.getBean(UserComponent.class)); 
  11.  
  12.  } 

今天就研究研究無參構(gòu)造這一部分究竟做了什么邏輯!

無參構(gòu)造

 

其中的 StartupStep 是 5.3 新增的類,看代碼注釋的意思是:表示用來記錄啟動(dòng)過程中的一些指標(biāo)信息等。暫時(shí)不做研究。

主要研究紅框部分!注意,這一塊并不代表只有紅框部分!

 

因?yàn)?AnnotationConfigApplicationContext 繼承了GenericApplicationContext,所以會(huì)先執(zhí)行父類的構(gòu)造方法。

 

所以這里會(huì)創(chuàng)建一個(gè) DefaultListableBeanFactory 的容器。

DefaultListableBeanFactory

 


DefaultListableBeanFactory UML

 

 

雖然說 Spring 的 BeanFactory 定義了容器的基礎(chǔ)概念、接口方法等,但是 DefaultListableBeanFactory 才是一個(gè)真正可以 new 出來的具體的容器,當(dāng)然也可以暫且稱之為 bean 工廠。

下面來看一下 DefaultListableBeanFactory 里面都有什么?

 

在 DefaultListableBeanFactory 里面會(huì)初始化很多參數(shù),其中重點(diǎn)關(guān)注的是下面兩個(gè)參數(shù):

  1. /** Map of bean definition objects, keyed by bean name. */ 
  2. // BeanDefinition 的存儲(chǔ) Map 其中 key 為 beanName 
  3. private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256); 
  4.  
  5. /** List of bean definition names, in registration order. */ 
  6. // BeanName 的集合 
  7. private volatile List<String> beanDefinitionNames = new ArrayList<>(256); 

其中 BeanDefinition 描述了一個(gè) bean 實(shí)例,該實(shí)例具有屬性值,構(gòu)造函數(shù)參數(shù)值以及具體實(shí)現(xiàn)所提供的更多信息。

對應(yīng)的 beanDefinitionMap 就是存儲(chǔ)的初始化的 beanName 和 BeanDefinition。

至于 BeanDefinition 具體內(nèi)容,下一節(jié)再做介紹。

2.總結(jié)

通過上面的閱讀,可以在初始化流程中增加一部分模塊,即實(shí)例化 DefaultListableBeanFactory

 

再回顧一下 DefaultListableBeanFactory 的概念。

ConfigurableListableBeanFactory 和 BeanDefinitionRegistry 接口的默認(rèn)實(shí)現(xiàn):基于bean定義元數(shù)據(jù)的成熟bean工廠,可通過后處理器進(jìn)行擴(kuò)展。重點(diǎn)需要把握的是 DefaultListableBeanFactory 內(nèi)部定義了 BeanDefinition 的 Map。

結(jié)束語

本文從入口開始,進(jìn)入到構(gòu)造,主要介紹了 DefaultListableBeanFactory 的創(chuàng)建,及創(chuàng)建時(shí)初始化了一堆參數(shù)。

考慮到文章篇幅問題,盡量避免大段大段的貼代碼以及注釋,有興趣的小伙伴可以試著自己搭建源碼構(gòu)建環(huán)境,然后 Debug 走一走,這樣也可以互相探討,共同學(xué)習(xí)。

本文轉(zhuǎn)載自微信公眾號「程序員小航」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系程序員小航公眾號。

 

責(zé)任編輯:武曉燕 來源: 程序員小航
相關(guān)推薦

2024-01-15 06:34:09

Gin鏡像容器

2023-05-03 23:48:24

Spring容器初始化

2025-03-14 10:37:24

SpringSpring IOC容器

2020-07-14 07:27:48

容器IoCSpring

2012-05-23 12:46:53

JavaJava類

2023-11-12 23:08:17

C++初始化

2015-10-30 09:51:19

Java重寫初始化隱患

2023-07-13 09:13:18

Docker容器

2011-06-17 15:29:44

C#對象初始化器集合初始化器

2019-11-04 13:50:36

Java數(shù)組編程語言

2009-09-08 09:48:34

LINQ初始化數(shù)組

2009-11-11 15:29:15

ADO初始化

2021-03-12 10:30:11

SpringMVC流程初始化

2010-07-28 10:22:33

FlexApplica

2022-07-06 10:37:45

SpringServlet初始化

2024-03-08 08:26:25

類的加載Class文件Java

2021-12-26 00:08:35

C++初始化列表

2009-09-18 11:15:52

C#數(shù)組初始化

2009-09-25 16:55:08

Hibernate初始

2009-12-16 14:04:04

Ruby對象初始化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號