Spring底层原理(一)

news2024/11/19 22:51:31

Spring底层原理(一)

ApplitionContextBeanFactory
  • BeanFactoryApplicationContext的父接口
  • BeanFactory才是Spring的核心容器,ApplicationContext对其功能进行了组合

类图

在这里插入图片描述

内部方法调用

在这里插入图片描述

BeanFactory的功能

在这里插入图片描述

  • 获取bean
  • 检查是否包含bean
  • 获取bean别名

表面上只有getBean,实际上控制反转、基本的依赖注入、直至Bean的生命周期的各种功能,都由它的实现类提供

🔖单例bean的管理(了解即可)

在这里插入图片描述

在这里插入图片描述

获取容器中的单例bean

@SpringBootApplication
public class SimpleApplication {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(SimpleApplication.class, args);
        Field field = DefaultSingletonBeanRegistry.class.getDeclaredField("singletonObjects");
        field.setAccessible(true);
        //获取BeanFactory
        ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory();
        Map<String, Object> map = (Map<String, Object>) field.get(beanFactory);
        map.entrySet().stream().filter(e -> e.getKey().startsWith("component"))
                .forEach(e -> {
                    System.out.println(e.getKey() + "=" + e.getValue());
                });
    }
}
ApplicationContext的功能

在这里插入图片描述

  • ApplicationContext除了可以对Bean管理外,还提供了如上四种功能
国际化功能
applicationContext.getMessage("msg", null, Locale.CHINA);
applicationContext.getMessage("msg", null, Locale.US);
applicationContext.getMessage("msg", null, Locale.JAPAN);
  • 可以通过applicationContext提供的getMessage方法对不同语言的资源文件进行读取
资源匹配功能
Resource[] resources = applicationContext.getResources("classpath:application.yml");
for (Resource resource : resources) {
     System.out.println(resource);//class path resource [application.yml]
}
  • classpath:获取类路径下的资源
  • classpath*:获取类路径下的资源包含jar包
  • file:获取文件系统下的资源
环境变量与配置文件读取功能

在这里插入图片描述

applicationContext.getEnvironment().getProperty("java_home");//C:\jdk-17
applicationContext.getEnvironment().getProperty("server.port");//8080
  • 变量名忽略大小写
事件发布功能

事件发布指南

  • 事件发布的作用:解耦合

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

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

相关文章

Vite介绍及实现原理

Vite介绍及实现原理 一、Vite简介1.1、什么是Vite1.2 、Vite的主要特性1.3、 为什么要使用Vite 二、Vite的实现原理2.1、依赖处理2.2、静态资源加载2.3、vue文件缓存2.4、 js/ts处理 三、热更新原理四、vite基本使用4.1、安装4.2、搭建项目 一、Vite简介 1.1、什么是Vite Vite…

“中国版Zara”拉夏贝尔:从辉煌到破产清算

文/ 大力财经 拉夏贝尔的破产清算&#xff0c;让人不禁惋惜。这个曾经被誉为“中国版Zara”的女装品牌&#xff0c;在全国拥有超过2000家门店&#xff0c;一度是年轻人的追捧对象。 然而&#xff0c;由于市场竞争激烈、品牌定位模糊、库存积压严重等问题&#xff0c;拉夏贝尔…

数字人扫描对虚拟人三维动画宣传片制作有何作用?

近日&#xff0c;周杰伦超写实数智人“周同学”首支元宇宙先导片《次元拓》在演唱会现场进行了全球首发&#xff0c;通过对实景拍摄一比一还原&#xff0c;打造出一个多重混合现实的元宇宙世界&#xff0c;展现出逼真的视觉效果&#xff0c;为粉丝和大众带来了一场科技的视觉盛…

idea免费插件分享

分享一些在开发中常用到的idea插件&#xff0c;都是一些我自己常用的&#xff0c;希望对各位程序员有帮助吧。 1、Chinese Language 汉化插件&#xff1a;中文语言包将为您的 IntelliJ IDEA, AppCode, CLion, DataGrip, GoLand, PyCharm, PhpStorm, RubyMine, WebStorm, 和Rid…

【备忘录】修复docker环境下的nacos安全漏洞:身份认证绕过漏洞

文章目录 一、漏洞复现1.1 访问登录口用户名输入nacos密码输入任意值&#xff0c;进行抓包1.2 伪造登录凭证1.3 登录包中新加入一项凭证验证 二、漏洞解决2.1 分析原因2.2 解决方案2.3 操作留痕1、先了解nacos部署环境2、查看比对配置文件3、修改配置文件后&#xff0c;重启 一…

单链表,三部分详解(第一部分)单链表的解析

1. 链表的概念及结构 链表就是一个在物理储存上非连续&#xff0c;但在逻辑顺序上是连续的指针链接实现。 链表就像一大节火车&#xff0c;你在淡季的时候可以把车厢减少一点&#xff0c;旺季的 时候可以多加一点&#xff0c;不会影响其他车厢的使用。每节车厢都独立存在。 那我…

Hadoop+Hive+Spark+Hbase开发环境练习

1.练习一 1.数据准备 在hdfs上创建文件夹&#xff0c;上传csv文件 [rootkb129 ~]# hdfs dfs -mkdir -p /app/data/exam 查看csv文件行数 [rootkb129 ~]# hdfs dfs -cat /app/data/exam/meituan_waimai_meishi.csv | wc -l 2.分别使用 RDD和 Spark SQL 完成以下分析&#xf…

【环境】Linux下Anaconda/ Miniconda安装+百度Paddle环境搭建+Cudnn(3090显卡+CUDA11.8+cudnn8.6.0)

清华源帮助链接&#xff1a;https://mirror.tuna.tsinghua.edu.cn/help/anaconda/ 下载链接&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 其他深度学习环境相关博文&#xff1a;【stable-diffusion】4090显卡下dreambooth、lora、sd模型微调的GUI环境…

没有英语要求的中国人大女王金融硕士有多香你可能还不知道

在当今全球化的世界中&#xff0c;英语已经成为了一种国际通用语言。对于许多学生来说&#xff0c;掌握英语是实现个人发展和职业成功的关键。尤其是在读研阶段&#xff0c;英语水平的要求更是不容忽视。但现实问题是我们没有相应的语言环境&#xff0c;直接导致的是大学的英语…

GPR 子波 一阶微分高斯脉冲和Ricker子波

gprMAX仿真时 用ricker子波&#xff0c;被审稿人咨询为什么用ricker波&#xff1f; 咨询了GPR设计专家&#xff0c;地耦雷达会用一阶高斯微分&#xff0c;空藕用ricker子波。实际上&#xff0c;我们都么有考虑这个。 给出matlab绘制代码 1 高斯脉冲 1.1 代码 % Parameters…

docker-rabbitmq 安装依赖

出现的问题如下: channel error; protocol method: #method(reply-code404, reply-textNOT_FOUND - no channel error&#xff1b; protocol method: #method&#xff1c;channel.close&#xff1e;(reply-code404, reply-textNOT_FOUND - no 查看rabbitmq 客户端是否存在如…

几千粉丝的视频账号播放量只有几百怎么办?借助批量剪辑快速提升播放量

为什么很多人的短视频账号明明有几千粉丝&#xff0c;但是发的作品却只有几百的播放量&#xff1f; 其实原因很简单&#xff0c;大多数人在起号的时候都会犯一个低级错误——盲目追求粉丝数量&#xff0c;而不在意粉丝质量。 做付费流量都懂&#xff1a;越是便宜的粉&#xf…

【会议征稿通知】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)

第三届密码学、网络安全和通信技术国际会议&#xff08;CNSCT 2024&#xff09; 2024 3rd International Conference on Cryptography, Network Security and Communication Technology 随着互联网和网络应用的不断发展&#xff0c;网络安全在计算机科学中的地位越来越重要&…

linux elf relationship between data structures involved in symbol resolution

When a program imports a certain function or variable, the linker will include a string with the function or variable’s name in the .dynstr section. A symbol (Elf Sym) that refers to the function or variable’s name in the .dynsym section, and a relocati…

vue面试题及答案【集合目录】

前言&#xff1a; 欢迎浏览和关注本专栏《 前端就业宝典 》&#xff0c; 不管是扭螺丝还是造火箭&#xff0c; 多学点知识总没错。 这个专栏是扭螺丝之上要造火箭级别的知识&#xff0c;会给前端工作学习的小伙伴带来意想不到的帮助。 本专栏将前端知识拆整为零&#xff0c;主要…

UI自动化测试,让测试高效起来

RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块&#xff0c;覆盖了整个产品测试周期。 RunnerGo UI自动化基于Selenium浏览器自动化方案构建&#xff0c;内嵌高度可复用的测试脚本&#xff0c;测试团队无需复杂的代码编写即可开展低代码的自动化…

软考-des题目案例

1.补全图片中的数字 &#xff08;1&#xff09;10 &#xff0c;&#xff08;2&#xff09;6&#xff0c;&#xff08;3&#xff09;1&#xff0c;&#xff08;4&#xff09;11 2.初始置换简单计算 置换时&#xff0c;从左上角的第一个元素开始&#xff0c;表示输入的明文的第5…

中国人民大学金融加拿大女王大学硕士项目:中外名校强强联手,共同打造金融精英

随着全球经济一体化的不断深入&#xff0c;金融行业在国际竞争中的地位日益凸显。为了培养具有国际视野、创新精神和实践能力的金融人才&#xff0c;中国人民大学与加拿大女王大学携手合作&#xff0c;共同打造了金融硕士项目。人大女王金融硕士项目旨在为学生提供世界一流的教…

sshd 解决问题 Deprecated SSH Cryptographic Settings 通过修改配置 去掉废弃的加密算法

sshd 解决问题 Deprecated SSH Cryptographic Settings 通过修改配置 去掉废弃的加密算法 证实无效, 有效解决办法是升级 openssh到最新版本,可以 yum 或者 编译安装 漏洞检测报说 使用废弃的加密算法 aes128-cbc aes256-cbc我们通过配置文件来去掉这两个算法,只保留系统中的…

使用Ubuntu系统搭建RabbitMQ服务并结合内网穿透实现公网访问

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…