当前位置: 代码网 > it编程>编程语言>Java > SpringBean实例化的基本流程源码剖析

SpringBean实例化的基本流程源码剖析

2026年01月26日 Java 我要评论
springbean实例化的基本流程一、原理spring 容器在进行初始化时,会将 xml 配置的<bean>的信息封装成一个 beandefinition 对象,所有的beandefin

springbean实例化的基本流程

一、原理

spring 容器在进行初始化时,会将 xml 配置的<bean>的信息封装成一个 beandefinition 对象,所有的beandefinition 存储到一个名为beandefinitionmap的 map 集合中去,spring 框架在对该 map 进行遍历,使用反射创建 bean 实例对象,创建好的 bean 对象存储在一个名为singletonobjects的 map 集合中,当调用getbean方法时则最终从该 map 集合中取出 bean 实例对象返回。

二、实验部分

2.1验证 beandefinition 是存储bean标签的信息

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");
    }
}

此时由于xml中的userservice没有传入属性,所以beandefinitionmap中它的propertyvalues为0:

加入property属性时:

<?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>

当然有更多的属性就不再一一演示了,详细的可以看下面这个图:

2.2源码剖析

依据信息找到源码可见beanfactory内部确实是维护着singletonobjects的 map 集合。

三、总结

3.1详细流程

到此这篇关于springbean实例化的基本流程的文章就介绍到这了,更多相关springbean实例化内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com