深入学习Spring——笔记

news2025/7/15 2:36:25

实习之余多学点,希望一个月之内能够完成这个笔记

Spring笔记

  • 3-8
    • BeanFactory && ApplicationContext
      • BeanFactory
      • ApplicationContext

3-8

BeanFactory && ApplicationContext

BeanFactory

首先,从SpringBoot的主启动类来看

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(DemoApplication.class, args);
    }
}

在IDEA中将光标放到ConfigurableApplication上,ctrl + alt + u。 可查看该类的相关类图如下:
在这里插入图片描述
可以看到ConfigurableApplication、ApplicationContext、BeanFactory。从图中可以看出ApplicationContext间接实现了BeanFactory而ConfigurableApplication实现ApplicationContext。也就是更核心的其实就是BeanFactory

使用Debug对ConfigableApplication的实例进行查看,可以看到示例中包含beanFactory对象
在这里插入图片描述
然而单纯的看BeanFactory,其名下并没有太多的方法
在这里插入图片描述

最主要的其实是BeanFactory的实现类DefaultListableBeanFactory。其继承、实现的接口、类的情况如下
在这里插入图片描述

虽然BeanFactory表面上看着比较简单,但是实际上控制反转、依赖注入、Bean的生命周期等功能,都是由他的实现类来提供的
以DefaultListableBeanFactory间接继承的父类DefauleSingletonBeanRegistry为例,获取对应的单例bean

 public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        ConfigurableApplicationContext run = SpringApplication.run(DemoApplication.class, args);
        System.out.println(run);

        //因为singletonObjects是私有的,所以通过反射,获取DefaultSingletonBeanRegistry类中的名为singletonObjects的属性。
        Field singletonObjects = DefaultSingletonBeanRegistry.class.getDeclaredField("singletonObjects");
        //设置私有属性在类外面允许被访问
        singletonObjects.setAccessible(true);
        //获取当前Springboot实例的Bean Factory
        ConfigurableListableBeanFactory beanFactory = run.getBeanFactory();
        //根据beanFactory对象获取其对应的单例Bean的Map 键表示Bean的名称,值表示Bean的实例
        Map<String,Object> map = (Map<String, Object>) singletonObjects.get(beanFactory);
        //输出key value
        map.forEach((k,v)->System.out.println(k + "=" + v));

    }

可以使用@commpent @service等注解来注入对应的类,这些注解都会被Spring Boot识别,前提是放到类上,不要放到接口上,接口也不能实例化

ApplicationContext

MessageSource: getMessage().主要是读取对应的properties文件,进行一个语言的转化
ResourcePatternResolver:getResources() 读取对应通配符路径下的文件,参数例classpath:application.properties,通配符如:classpath: \ filed:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMU软件20 UML复习资料

碎碎念 &#xff08;印象中复习资料漏了的知识点&#xff1a;P175&#xff1a;通信图&#xff0c;P168&#xff1a;UML顺序图的图框&#xff0c;都考完了也懒得再整理了&#xff0c;自己翻书看吧&#xff09; 昂&#xff0c;把下面这些都学会大概率不会不及格&#xff0c;要求…

蓝库云|数字化车间建设,是加速制造业数智化转型的关键因素

什么是制造业的数字化车间&#xff0c;对于传统制造业来说这也许是个新词汇&#xff0c;但在企业数字化转型中&#xff0c;数字化车间的存在至关重要&#xff0c;其意思就是将制造业车间里所有的工作流程数字化&#xff0c;实现设备、生产流程、工人等各环节之间的数字化管理与…

SQL注入——时间盲注

目录 一&#xff0c;时间盲注概述 二&#xff0c;关键函数 sleep() if() 三&#xff0c;注入原理 四&#xff0c;实例 一&#xff0c;时间盲注概述 web页面只返回一个正常页面。利用页面响应时间不同&#xff0c;逐个猜解数据。但是前提是数据库会执行命令代码&#xff…

dashboard疏散主机提示报错:无法疏散主机...处理方法、openstack虚拟机状态卡在重启处理方法、openstack在数据库修改虚拟机状态的方法

文章目录dashboard疏散主机提示报错&#xff1a;无法疏散主机...处理方法报错说明【状态卡在reboot状态】解决方法【登录nova数据库修改虚拟机信息】首先获取nova数据库的密码登录nova数据库并做修改验证信息是否修改成功再次迁移并验证报错说明【虚拟机状态error也会导致疏散失…

二叉树的遍历(前序、中序、后序)| C语言

目录 0.写在前面 1.前序遍历 步骤详解 代码实现 2.中序遍历 步骤详解 代码实现 3.后序遍历 步骤详解 代码实现 0.写在前面 认识二叉树结构最简单的方式就是遍历二叉树。所谓遍历二叉树就是按照某种特定的规则&#xff0c;对二叉树的每一个节点进行访问&#xff0c;…

QML动画(Animator)

在Qt5.2之后&#xff0c;引入Animator动画元素。这种方式可以直接所用于Qt Quick的场景图形系统&#xff0c;这使得基于Animator元素的动画及时在ui界面线程阻塞的情况下仍然能通过图形系统的渲染线程来工作&#xff0c;比传统的基于对象和属性的Animation元素能带来更好的用户…

CAD如何导入其他图纸的打印设置?CAD打印设置导入步骤

CAD打印设置怎么导入&#xff1f;这个问题相信很多设计师小伙伴在CAD图纸打印过程中都曾想到过&#xff0c;但不知道CAD如何导入其他图纸的打印设置&#xff0c;今天小编就以浩辰CAD软件为例来给大家分享一下CAD打印设置导入的具体操作步骤&#xff0c;一起来看看吧&#xff01…

把第三方sdk放在thinkphp的那个目录

ThinkPHP5.1 如何自动加载第三方SDK&#xff08;非composer包 &#xff09;注意&#xff1a;这里只是针对于非Composer 安装包的自动加载的实现&#xff0c;能用composer安装的自动跳过。由于ThinkPHP5.1 严格遵循PSR-4规范&#xff0c;不再建议手动导入类库文件&#xff0c;所…

应用实战|微信小程序开发示例--多人聊天互动空间

“超能力”数据库&#xff5e;拿来即用&#xff0c;应用开发人员再也不用为撰写API而发愁。MemFire Cloud 为开发者提供了简单易用的云数据库&#xff08;表编辑器、自动生成API、SQL编辑器、备份恢复、托管运维&#xff09;&#xff0c;很大地降低开发者的使用门槛。 本示例是…

[Web]——限流

限流概念&#xff1a;什么是限流呢&#xff1f;限流是限制到达系统的并发请求数量&#xff0c;保证系统能够正常响应部分用户请求&#xff0c;而对于超过限制的流量&#xff0c;则通过拒绝服务的方式保证整体系统的可用性。限流的分类:根据作用范围可以分为单机限流和分布式限流…

Delphi 实现HTML邮件发送

在我们的邮箱里&#xff0c;经常收到HTML格式的邮件。每注册一个网站的时候&#xff0c;总会收到一些他们发来的邮件&#xff0c;打开一后发现和一个网页一样&#xff0c;有图片、链接、文字&#xff0c;甚至有的还有声音和视频和交互。那我们想知道我们怎么才可以给朋友发送这…

【FLY】Java知识点总结

目录认识Java概念图名词解释历史版本基础知识编程规范关键字数据类型运算符数组Stringequals与流程控制引用数据结构常用数据结构HashMapLinkedHashMapWeakHashMapIdentityHashMapEnumMapTreeMapCopyOnWriteArrayList面向对象类反射注解IO异常线程EffectiveJava8JVM运行时数据区…

MXNet的机器翻译实践《编码器-解码器(seq2seq)和注意力机制》

机器翻译就是将一种语言翻译成另外一种语言&#xff0c;输入和输出的长度都是不定长的&#xff0c;所以这里会主要介绍两种应用&#xff0c;编码器-解码器以及注意力机制。编码器是用来分析输入序列&#xff0c;解码器用来生成输出序列。其中在训练时&#xff0c;我们会使用一些…

centos7安装教程

1.点击文件–新建虚拟机 2.根据图片一直下一步或者做一些改动 3. 点击自定义硬件&#xff0c;点击浏览选中下载好的ISO文件 4.配置完成后启动虚拟机 5.选择语言&#xff0c;中英文都可&#xff0c;按需求选择 6.进行设置目标位置&#xff0c;配置分区 7.选择网络和主机名 8.配置…

.net6 web api使用EF Core,根据model类自动生成表

1.安装EF Core和mysql数据库的nuget包 Microsoft.EntityFrameworkCore Pomelo.EntityFrameworkCore.MySql 2.创建models文件夹&#xff0c;在文件夹下创建实体类 public class Users{public int Id { get; set; }[Column(TypeName "varchar(200)"), Required]publ…

Streaming systems 第三章中文

Chapter 3. Watermarks GIthub链接&#xff0c;欢迎志同道合的小伙伴一起翻译 到目前为止&#xff0c;我们一直从pipeline设计者或数据科学家的角度来研究流处理。第二章介绍了水印&#xff0c;对事件时间处理中发生的位置和处理时间中结果何时输出的基本问题做了一部分回答。…

制造企业数字化工厂建设步骤的建议

随着工业4.0、中国制造2025的深度推进&#xff0c;越来越多的制造企业开始迈入智能制造的领域&#xff0c;那数字工厂要从何入手呢&#xff1f; 数字工厂规划的核心&#xff0c;也正是信息域和物理域这两个维度&#xff0c;那就从这两个维度来进行分析&#xff0c;看如何进行数…

MySQL架构篇

一、进阶学习环境说明 1.1 MySQL服务器环境 Linux虚拟机&#xff1a;CentOS 7 MySQL&#xff1a;MySQL5.7.30 在Linux服务器中安装MySQL&#xff1a; ps.如果有自己的云服务器&#xff0c;可忽略前两步&#xff0c;直接进行第三步 1.2 服务器日志文件说明 MySQL是通过文件系统对…

论文投稿指南——中文核心期刊推荐(经济管理)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

什么蓝牙耳机好用戴着舒适?佩戴舒适音质好的无线蓝牙耳机

戴耳机时间长会导致耳朵痛&#xff0c;时间长了对我们的听力还有影响。一款佩戴舒适的耳机更贴合耳朵的设计&#xff0c;能够带来更加优质的聆听体验&#xff0c;下面甄选出了几款佩戴比较舒适的耳机推荐&#xff0c;音质还非常出众。 一、南卡小音舱蓝牙耳机 单耳重量&#x…