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

初始化容器與 DefaultListableBeanFactory

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

 [[355480]]

前言

 

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

1入口

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

 

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

 

所以在啟動時也可以直接聲明無參構(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 新增的類,看代碼注釋的意思是:表示用來記錄啟動過程中的一些指標(biāo)信息等。暫時不做研究。

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

 

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

 

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

DefaultListableBeanFactory

 


DefaultListableBeanFactory UML

 

 

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

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

 

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

  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 實例,該實例具有屬性值,構(gòu)造函數(shù)參數(shù)值以及具體實現(xiàn)所提供的更多信息。

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

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

2.總結(jié)

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

 

再回顧一下 DefaultListableBeanFactory 的概念。

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

結(jié)束語

本文從入口開始,進入到構(gòu)造,主要介紹了 DefaultListableBeanFactory 的創(chuàng)建,及創(chuàng)建時初始化了一堆參數(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容器初始化

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數(shù)組編程語言

2009-09-08 09:48:34

LINQ初始化數(shù)組

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#數(shù)組初始化

2009-09-25 16:55:08

Hibernate初始
點贊
收藏

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

主站蜘蛛池模板: 97精品超碰一区二区三区 | 国产精品精品视频一区二区三区 | 黄网站涩免费蜜桃网站 | 国产精品免费观看 | 久久婷婷国产麻豆91 | 亚洲精品一区二区三区 | 人人操日日干 | va精品 | 亚洲精品视频在线观看视频 | 五月婷婷亚洲 | 久久亚洲免费 | 香蕉久久网 | 午夜精品一区二区三区在线观看 | 337p日本欧洲亚洲大胆精蜜臀 | 国产精品自产拍 | 精品视频在线免费观看 | 91在线观看视频 | 99久久精品免费看国产小宝寻花 | 99久久婷婷 | 91av在线看 | 欧美一级黄色片 | 免费黄色片视频 | 久久久久久国产精品 | 色视频成人在线观看免 | 中文字幕亚洲视频 | 在线播放中文字幕 | 一级片片 | 欧美日韩国产在线观看 | 美日韩精品 | 麻豆hd| 欧美国产日韩在线 | 亚洲精品日韩精品 | 爱爱无遮挡| 国产欧美在线播放 | 久久中文字幕一区 | 91在线电影 | 一区在线视频 | 欧美精品电影一区 | 7777精品伊人久久精品影视 | 成人精品一区二区 | 成人午夜视频在线观看 |