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实例化内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论