Spring源码学习——(一)

简介: 第一讲——了解BeanFactory和ApplicationContext

一般来说,在Springboot项目中,我们的项目启动文件中都有这样一行代码:

SpringApplication.run(SpringtestApplication.class, args);

这行代码的目的其实就是启动应用程序,并获得上下文环境。在这里,我们不妨用一个变量来接收这个函数的返回值:(这里使用idea的自动声明变量Alt+Enter)

ConfigurableApplicationContext context = SpringApplication.run(SpringtestApplication.class, args);

那这个返回值里面到底有什么呢?我们打上断点并运行项目,查看context中的内容:

image.png
可以发现,context里面其实就是整个应用程序的上下文,包含有大量程序运行时的bean。进一步地,我们通过观察context的继承关系图,可以看到如下结果:
image.png
其中,最上层的接口就是BeanFactory,也就是真正Spring的核心容器。
我们常常会用到这样一行代码来获取运行时的bean对象(根据对象名字获取bean):

context.getBean("aaa");

按住ctrl+alt,点到这个getBean函数的实现位置,我们可以看到如下代码:

public Object getBean(String name) throws BeansException {
        this.assertBeanFactoryActive();
        return this.getBeanFactory().getBean(name);
    }

显然,实际上ConfigurableApplicationContext中实现getBean方法的原理是根据BeanFactory来获得的。
因此,BeanFactory和ApplicationContext两者之间的关系就出来了:

/**
         * 1.到底什么是BeanFactory
         *      - 它是ApplicationContext的父接口
         *      - 它才是Spring的核心容器,主要的ApplicationContext实际都[组合]了它的功能
         */
相关文章
|
7天前
|
XML Java 数据格式
深度解析 Spring 源码:从 BeanDefinition 源码探索 Bean 的本质
深度解析 Spring 源码:从 BeanDefinition 源码探索 Bean 的本质
17 3
|
6天前
|
存储 Java 程序员
Spring 注册BeanPostProcessor 源码阅读
Spring 注册BeanPostProcessor 源码阅读
|
6天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的学习自律养成小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的学习自律养成小程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
1天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的中医学习服务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的中医学习服务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
16 5
|
5天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的学生网课学习效果评价的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的学生网课学习效果评价的详细设计和实现(源码+lw+部署文档+讲解等)
22 7
|
11天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的中医学习服务管理系统的详细设计和实现
基于SpringBoot+Vue的中医学习服务管理系统的详细设计和实现
31 13
|
6天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的学习网站系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的学习网站系统的详细设计和实现(源码+lw+部署文档+讲解等)
22 5
|
11天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的在线学习过程管理系统软件的详细设计和实现
基于SpringBoot+Vue的在线学习过程管理系统软件的详细设计和实现
41 12
|
11天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现
基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现
32 11
|
11天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的大学生国学自主学习平台的详细设计和实现
基于SpringBoot+Vue的大学生国学自主学习平台的详细设计和实现
34 10