Spring源码解析-配置文件的加载

  spring是一个很有名的java开源框架,作为一名javaer还是有必要了解spring的设计原理和机制,beans、core、context作为spring的三个核心组件。而三个组件中最重要的就是beans组件了。

  从一个简单实例来查看spring加载配置文件中的bean。

public class Student {

    private int stId;

    private String studentName;

    private String studentAge;

    public int getStId() {
        return stId;
    }

    public void setStId(int stId) {
        this.stId = stId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public String getStudentAge() {
        return studentAge;
    }

    public void setStudentAge(String studentAge) {
        this.studentAge = studentAge;
    }
}

  spring-beans.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" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    <bean ></bean>
</beans>

  测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
        "classpath:spring/spring-beans.xml"})
public class SpringSourceTest {
    @Test
    public void testSpring1(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/spring-beans.xml");
        Student student = (Student)context.getBean("student");
        System.out.println(student);
    }
}

  spring配置文件加载流程

    Spring源码解析-配置文件的加载

点击查看大图

下面对每一个流程的代码展示

Spring源码解析-配置文件的加载

 刷新context

Spring源码解析-配置文件的加载

获取beanFactory

Spring源码解析-配置文件的加载

 刷新beanFacory

Spring源码解析-配置文件的加载

Spring源码解析-配置文件的加载

Spring源码解析-配置文件的加载

 获取配置文件,并且加载beanDefinition

Spring源码解析-配置文件的加载

 读取配置文件

Spring源码解析-配置文件的加载

解析xml文件

Spring源码解析-配置文件的加载

解析beanDefinition

Spring源码解析-配置文件的加载

Spring源码解析-配置文件的加载

Spring源码解析-配置文件的加载

注册beanDefinition

Spring源码解析-配置文件的加载

最后将beanDefinition注册到beanDefinitionMap中

Spring源码解析-配置文件的加载