成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

初始化容器與 DefaultListableBeanFactory

開發 前端
本文從入口開始,進入到構造,主要介紹了 DefaultListableBeanFactory 的創建,及創建時初始化了一堆參數。

 [[355480]]

前言

 

在前一篇文章:創建 IoC 容器的幾種方式中,介紹了四種方式,這里以 AnnotationConfigApplicationContext 為例,跟進代碼,看看 IoC 的啟動流程。

1入口

從 JavaConfig 中加載配置的 AnnotationConfigApplicationContext 啟動方式如下:

 

進去之后發現構造其實是調用的當前無參構造。

 

所以在啟動時也可以直接聲明無參構造,改寫為下面這種:

  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.  } 

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

無參構造

 

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

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

 

因為 AnnotationConfigApplicationContext 繼承了GenericApplicationContext,所以會先執行父類的構造方法。

 

所以這里會創建一個 DefaultListableBeanFactory 的容器。

DefaultListableBeanFactory

 


DefaultListableBeanFactory UML

 

 

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

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

 

在 DefaultListableBeanFactory 里面會初始化很多參數,其中重點關注的是下面兩個參數:

  1. /** Map of bean definition objects, keyed by bean name. */ 
  2. // BeanDefinition 的存儲 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 描述了一個 bean 實例,該實例具有屬性值,構造函數參數值以及具體實現所提供的更多信息。

對應的 beanDefinitionMap 就是存儲的初始化的 beanName 和 BeanDefinition。

至于 BeanDefinition 具體內容,下一節再做介紹。

2.總結

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

 

再回顧一下 DefaultListableBeanFactory 的概念。

ConfigurableListableBeanFactory 和 BeanDefinitionRegistry 接口的默認實現:基于bean定義元數據的成熟bean工廠,可通過后處理器進行擴展。重點需要把握的是 DefaultListableBeanFactory 內部定義了 BeanDefinition 的 Map。

結束語

本文從入口開始,進入到構造,主要介紹了 DefaultListableBeanFactory 的創建,及創建時初始化了一堆參數。

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

本文轉載自微信公眾號「程序員小航」,可以通過以下二維碼關注。轉載本文請聯系程序員小航公眾號。

 

責任編輯:武曉燕 來源: 程序員小航
相關推薦

2024-01-15 06:34:09

Gin鏡像容器

2023-05-03 23:48:24

Spring容器初始化

2020-07-14 07:27:48

容器IoCSpring

2025-03-14 10:37:24

SpringSpring IOC容器

2025-05-21 10:09:09

Spring 5.xIOC編程

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容器

2019-11-04 13:50:36

Java數組編程語言

2009-09-08 09:48:34

LINQ初始化數組

2009-11-11 15:29:15

ADO初始化

2010-07-28 10:22:33

FlexApplica

2021-03-12 10:30:11

SpringMVC流程初始化

2022-07-06 10:37:45

SpringServlet初始化

2011-06-17 15:29:44

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

2024-03-08 08:26:25

類的加載Class文件Java

2009-12-16 14:04:04

Ruby對象初始化

2009-09-18 11:15:52

C#數組初始化

2009-09-25 16:55:08

Hibernate初始
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产乱一区二区三区视频 | 在线综合视频 | 国产视频中文字幕在线观看 | 91精品国产高清一区二区三区 | 免费看91 | 免费视频99 | 成人免费观看网站 | 精品国产一区二区三区日日嗨 | 久久av一区| 精品欧美久久 | 亚洲天堂免费 | 在线观看国产h | 久久av一区二区三区 | 亚洲黄色av网站 | 久久精品毛片 | 一区二区三区精品视频 | 国产91在线 | 亚洲 | 欧美日韩国产一区二区三区 | 日批av| 手机看黄av免费网址 | 在线视频亚洲 | 午夜在线| 久久99精品久久久久久国产越南 | 国产精品视频不卡 | 真人一级毛片 | 一区二区三区网站 | 色精品视频 | 色综网| 国产精品久久久久久久7电影 | 亚洲三级在线观看 | 在线国产欧美 | 亚洲黄色视屏 | 国产一区二区三区四区在线观看 | 久久一级大片 | 精品一区二区三区在线观看国产 | 国产一区二区在线播放 | 婷婷激情五月网 | 日韩欧美三级在线 | 成人免费片 | 在线观看日韩精品视频 | 国产精品一区二区电影 |