Spring源码学习——(二)

简介: 第二讲——了解BeanFactory的功能

直接找到BeanFactory的源码,按ctrl+F12查看整个类的结构,有如下结果:
image.png

表面上看起来很简单,仿佛就是几个函数而已。实际上BeanFactory的功能实现都在它的默认实现类中,即DefaultListableBeanFactory中。我们找到这个类,并查看它的继承关系图:
image.png
显然,它实现了BeanFactory。我们从它实现的一个单例Bean类来进行分析,即DefaultSingletonBeanFactory中进行分析,查看源码:
image.png

这个红色的Map集合就是所有的单例对象了。我们通过反射拿到这个私有对象,编写测试代码如下:

        try {
            Field singletonFactories = DefaultSingletonBeanRegistry.class.getDeclaredField("singletonObjects");
            singletonFactories.setAccessible(true);
            ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
            Map<String,Object> map = (Map<String,Object>)singletonFactories.get(beanFactory);
            map.forEach((k,v)->{
                System.out.println("k:" + k + ",v:" + v);
            });
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

通过反射代码拿到DefaultSingletonBeanRegistry实例中的singletonObjects,并输出,我么可以看到结果其实就是应用程序中的单例对象:
image.png
使用@SpringConfiguration+@Bean注解的Commponent也在对应的输出列表中:
image.png

        /**
         * 2.BeanFactory能干点啥
         *      - 表面上只有getBean
         *      - 实际上控制反转、基本的依赖注入、直至Bean的生命周期的各种功能,都是由他的实现类来提供
         */
目录
相关文章
|
3天前
|
前端开发 Java 数据库
SpringBoot学习
【10月更文挑战第7天】Spring学习
24 9
|
4天前
|
JavaScript Java 关系型数据库
自主版权的Java诊所管理系统源码,采用Vue 2、Spring Boot等技术栈,支持二次开发
这是一个自主版权的Java诊所管理系统源码,支持二次开发。采用Vue 2、Spring Boot等技术栈,涵盖患者管理、医生管理、门诊管理、药店管理、药品管理、收费管理、医保管理、报表统计及病历电子化等功能模块。
|
5天前
|
XML Java 数据格式
Spring学习
【10月更文挑战第6天】Spring学习
15 1
|
9天前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
|
9天前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
9天前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
27 2
|
9天前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
24 1
|
9天前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
13 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
9天前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
12 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
9天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
14 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库