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

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

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

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

一、原理

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

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

2.1驗(yàn)證 BeanDefinition 是存儲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)容請搜索腳本之家以前的文章或繼續(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)建對象時(shí)完成初始化,當(dāng)我們在new一個(gè)對象并傳入?yún)?shù)的時(shí)候,會自動調(diào)用構(gòu)造函數(shù)并完成參數(shù)的初始化,需要的朋友可以參考下
    2019-07-07
  • java并發(fā)鎖的實(shí)現(xiàn)

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

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

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

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

    淺談Maven Wrapper

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

    Spring中的@CrossOrigin注冊處理方法源碼解析

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

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

    這篇文章主要介紹了IDEA中Mybatis的MGB使用逆向工程配置,本文給大家介紹的非常詳細(xì),對大家的學(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模式,包含依賴配置、啟動類注解、服務(wù)注冊與調(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í)例,本文直接給出代碼示例,并用注釋說明,需要的朋友可以參考下
    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

最新評論

平凉市| 青田县| 阿合奇县| 昔阳县| 望江县| 宝鸡市| 大邑县| 道孚县| 南靖县| 颍上县| 灵山县| 柳江县| 新郑市| 仁布县| 富民县| 绥滨县| 五河县| 北宁市| 德化县| 罗定市| 罗定市| 通州市| 朝阳区| 漳州市| 开阳县| 新密市| 芜湖市| 广德县| 鲁山县| 平湖市| 容城县| 九台市| 恩施市| 营口市| 桓台县| 武隆县| 远安县| 道真| 来宾市| 舟曲县| 文安县|