最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBean實(shí)例化的基本流程源碼剖析

 更新時(shí)間:2026年01月26日 11:07:52   作者:MX_9359  
Spring容器通過BeanDefinition對(duì)象和singletonObjects Map集合管理Bean實(shí)例化過程,實(shí)現(xiàn)依賴注入和控制反轉(zhuǎn),本文給大家介紹SpringBean實(shí)例化的基本流程源碼剖析,感興趣的朋友跟隨小編一起看看吧

SpringBean實(shí)例化的基本流程

一、原理

Spring 容器在進(jìn)行初始化時(shí),會(huì)將 xml 配置的<bean>的信息封裝成一個(gè) BeanDefinition 對(duì)象,所有的BeanDefinition 存儲(chǔ)到一個(gè)名為beanDefinitionMap的 Map 集合中去,Spring 框架在對(duì)該 Map 進(jìn)行遍歷,使用反射創(chuàng)建 Bean 實(shí)例對(duì)象,創(chuàng)建好的 Bean 對(duì)象存儲(chǔ)在一個(gè)名為singletonObjects的 Map 集合中,當(dāng)調(diào)用getBean方法時(shí)則最終從該 Map 集合中取出 Bean 實(shí)例對(duì)象返回。

二、實(shí)驗(yàn)部分

2.1驗(yàn)證 BeanDefinition 是存儲(chǔ)bean標(biāo)簽的信息

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"></bean>
</beans>
package com.itheima.test;
import com.alibaba.druid.pool.DruidDataSource;
import com.itheima.dao.impl.UserDaoImpl;
import com.itheima.service.UserService;
import com.mysql.jdbc.Connection;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.xml.bind.annotation.XmlAccessOrder;
import java.io.IOException;
import java.io.InputStream;
import java.sql.DriverManager;
public class BeanFactoryTest {
    public static void main(String[] args) throws Exception {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext_beanfac.xml");
        UserService userService = (UserService) applicationContext.getBean("userService");
    }
}

此時(shí)由于xml中的userService沒有傳入屬性,所以beanDefinitionMap中它的propertyValues為0:

加入property屬性時(shí):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"/>
    </bean>
</beans>

當(dāng)然有更多的屬性就不再一一演示了,詳細(xì)的可以看下面這個(gè)圖:

2.2源碼剖析

依據(jù)信息找到源碼可見beanFactory內(nèi)部確實(shí)是維護(hù)著singletonObjects的 Map 集合。

三、總結(jié)

3.1詳細(xì)流程

到此這篇關(guān)于SpringBean實(shí)例化的基本流程的文章就介紹到這了,更多相關(guān)SpringBean實(shí)例化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能的實(shí)現(xiàn)

    基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能的實(shí)現(xiàn)

    本篇教程給大家分享基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能的實(shí)現(xiàn),驗(yàn)證碼功能的實(shí)現(xiàn)是采用Zuul網(wǎng)關(guān)的Filter過濾器進(jìn)行校驗(yàn)驗(yàn)證碼,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧
    2021-05-05
  • Java中構(gòu)造方法set/get和toString的使用詳解

    Java中構(gòu)造方法set/get和toString的使用詳解

    這篇文章主要介紹了Java中構(gòu)造方法set/get和toString的使用詳解,構(gòu)造函數(shù)的最大作用就是創(chuàng)建對(duì)象時(shí)完成初始化,當(dāng)我們?cè)趎ew一個(gè)對(duì)象并傳入?yún)?shù)的時(shí)候,會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)并完成參數(shù)的初始化,需要的朋友可以參考下
    2019-07-07
  • java并發(fā)鎖的實(shí)現(xiàn)

    java并發(fā)鎖的實(shí)現(xiàn)

    Java中的鎖主要是為了解決多個(gè)線程訪問共享數(shù)據(jù)時(shí)的競(jìng)爭(zhēng)問題,確保線程能夠安全地訪問和修改共享數(shù)據(jù),本文主要介紹了java并發(fā)鎖的實(shí)現(xiàn),感興趣的可以了解一下
    2024-04-04
  • JVM:你知道為什么對(duì)象一定在堆中分配嗎

    JVM:你知道為什么對(duì)象一定在堆中分配嗎

    這篇文章主要介紹了jvm對(duì)象的創(chuàng)建和分配的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-08-08
  • 淺談Maven Wrapper

    淺談Maven Wrapper

    這篇文章主要介紹了淺談Maven Wrapper,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Spring中的@CrossOrigin注冊(cè)處理方法源碼解析

    Spring中的@CrossOrigin注冊(cè)處理方法源碼解析

    這篇文章主要介紹了Spring中的@CrossOrigin注冊(cè)處理方法源碼解析,@CrossOrigin是基于@RequestMapping,@RequestMapping注釋方法掃描注冊(cè)的起點(diǎn)是equestMappingHandlerMapping.afterPropertiesSet(),需要的朋友可以參考下
    2023-12-12
  • IDEA中Mybatis的MGB使用逆向工程配置的詳細(xì)教程

    IDEA中Mybatis的MGB使用逆向工程配置的詳細(xì)教程

    這篇文章主要介紹了IDEA中Mybatis的MGB使用逆向工程配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring?boot整合dubbo+zookeeper的詳細(xì)過程

    Spring?boot整合dubbo+zookeeper的詳細(xì)過程

    本文講解Spring?Boot整合Dubbo與Zookeeper實(shí)現(xiàn)API、Provider、Consumer模式,包含依賴配置、啟動(dòng)類注解、服務(wù)注冊(cè)與調(diào)用步驟,及QoS、超時(shí)、負(fù)載均衡等參數(shù)設(shè)置,確保分布式服務(wù)通信正常運(yùn)行,感興趣的朋友一起看看吧
    2025-07-07
  • Java添加事件監(jiān)聽的四種方法代碼實(shí)例

    Java添加事件監(jiān)聽的四種方法代碼實(shí)例

    這篇文章主要介紹了Java添加事件監(jiān)聽的四種方法代碼實(shí)例,本文直接給出代碼示例,并用注釋說(shuō)明,需要的朋友可以參考下
    2014-09-09
  • Java大數(shù)運(yùn)算BigInteger與進(jìn)制轉(zhuǎn)換詳解

    Java大數(shù)運(yùn)算BigInteger與進(jìn)制轉(zhuǎn)換詳解

    這篇文章主要介紹了Java大數(shù)運(yùn)算BigInteger與進(jìn)制轉(zhuǎn)換詳解,Java 提供了 BigInteger(大整數(shù))類和 BigDecimal(大浮點(diǎn)數(shù))類用于大數(shù)運(yùn)算,這兩個(gè)類都繼承自 Number 類(抽象類),由于 BigInteger 在大數(shù)運(yùn)算中更常見,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

沭阳县| 湘西| 南川市| 铁岭市| 锡林郭勒盟| 清原| 靖边县| 广东省| 图木舒克市| 德化县| 德化县| 鸡东县| 浪卡子县| 繁峙县| 剑阁县| 阜宁县| 石河子市| 巴东县| 车险| 扎囊县| 正镶白旗| 兴隆县| 台州市| 庆阳市| 上饶市| 师宗县| 拜泉县| 兴宁市| 天津市| 临夏市| 凤山市| 额尔古纳市| 金溪县| 京山县| 德庆县| 巴塘县| 宁阳县| 沅陵县| 兴文县| 肥乡县| 乳山市|