Spring源码解析

第一讲 容器接口

BeanFactory和ApplicationContext接口的具体继承关系:

ApplicationContext 间接继承了BeanFactory

  • BeanFactory是父接口
  • ApplicationContext是子接口,里面一些功能调用了BeanFactory
BeanFactory的功能
  • 表面上只有 getBean(接口的方法)
  • 实际上控制反转、基本的依赖注入、直至bean的生命周期的各种功能,都由它的实现类来提供

他的实现类-DefaultListableBeanFactory

  • 父类:DefaultSingleletonBeanRegistry

BeanFactory的主要方法(看接口的主要方法ctrl+F12):

  • containsBean 根据bean的名字看容器中是否包含该对象
  • getAliases 根据bean的名字获取他的别名
  • getBean 根据name/type 获取该bean

管理所有单例对象

所有单例bean:singletonObjects

获取到所有单例bean

DefaultSingleletonBeanRegistry.class.get
ApplicationContext的扩展功能

ApplicationContext的扩展功能 ,主要来自 继承的四个接口

  • MessageSource 处理国际化资源能力
  • ResourcePayyernResolver 对通配符去匹配资源的能力
  • EnvironmentCapable 读取环境信息,比如读取 application.properties
  • ApplicationEventPublisher 发布事件对象
MessageSource 处理国际化资源能力
context.getMessage("hi",null, Locale.ENGLISH);
ResourcePayyernResolver 对通配符去匹配资源的能力
 //第二个接口 通配符classpath  jar包中classpath*:
context.getResource("classpath:hello.txt");
  • file: 磁盘路径
  • classpath: 相对路径
  • classpath*:也可以在jar包寻找
EnvironmentCapable 读取环境信息,比如读取 application.properties
//第三个信息 获取配置信息
//1、获取系统环境变量中的值
context.getEnvironment().getProperty("java_home");
//2、获取application.porperties
context.getEnvironment().getProperty("server.port");

ApplicationEventPublisher 发布事件对象
  //4、发送事件
context.publishEvent(new User());

接收事件

    @EventListenerpublic void res(User user){log.(user)}

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

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

相关文章

Django Rest Framework 创建纯净版Django项目部署DRF

描述创建纯净版的Django项目和 Django Rest Framework 环境的部署 一、创建Django项目 1. 环境说明 操作系统 Windows11python版本 3.9.13Django版本 V4.2.202. 操作步骤(在Pycharm中操作) 创建Python项目drfStudy、虚拟环境 ​虚拟环境中安装 jdangopip install django==4.…

图解AUTOSAR_CP_NetworkManagementInterface

AUTOSAR 网络管理接口(Nm)详解 AUTOSAR 网络管理接口规范与实现指南 目录 1. 概述 1.1. 网络管理接口的作用1.2. 网络管理接口的特点 2. 网络管理接口架构 2.1. 架构概览2.2. 模块交互关系 3. 网络管理状态机 3.1. 状态定义3.2. 状态转换 4. 协调算法 4.1. 协调关闭流程4.2. 同…

java学习总结(八):Spring boot

一、SpringBoot简介 传统Spring开发缺点: 1、导入依赖繁琐 2、项目配置繁琐 Spring Boot是全新框架(更像是一个工具, 脚手架),是Spring提供的一个子项目, 用于快速构建Spring应用程序。 随着Spring 3.0的发布,Spring 团…

vue-router实现

实现一个简化版的 vue-router 可以帮助我们更好地理解 Vue 路由是如何工作的。Vue Router 主要的功能是基于浏览器的 URL 来管理组件的显示,能够根据 URL 变化切换不同的视图。下面是一个简化版的实现,用于帮助你理解基本的路由机制。 创建一个简单的 V…

Redis 服务器:核心功能与优化实践

Redis 服务器:核心功能与优化实践 引言 Redis(Remote Dictionary Server)是一款高性能的键值对存储系统,广泛用于缓存、消息队列、实时排行榜等场景。本文将深入探讨Redis服务器的核心功能,并提供一些优化实践的技巧,以帮助读者更好地理解和运用Redis。 Redis的核心功…

openEuler24.03 LTS下安装MySQL8

前提条件 拥有openEuler24.03 LTS环境,可参考:Vmware下安装openEuler24.03 LTS 步骤 卸载原有mysql及mariadb sudo systemctl stop mysql mysqld 2>/dev/null sudo rpm -qa | grep -i mysql\|mariadb | xargs -n1 sudo rpm -e --nodeps 2>/dev/…

GLOW-TTS

我首先需要理解用户的指令,用户希望我翻译文章的3.1节“Training and Inference Procedures”部分。为了完成这个任务,我需要仔细阅读文章的3.1节,理解其中的技术细节和概念,然后将这些内容准确地翻译成中文。 在阅读3.1节时&…

【算法思想】高精度

引入 首先了解&#xff1a; 1. int 范围为10^9 2. long long 范围数量级为10^18 如果超过该数量级&#xff0c;该怎么办&#xff1f; ——这就是高精度、大数的算法问题 加法 输入两个整数a,b,输出他们的和&#xff08;<10的500次方&#xff09; 核心是加法的核心——》每…

【失败了】LazyGraphRAG利用本地ollama提供Embedding model服务和火山引擎的deepseek API构建本地知识库

LazyGraphRAG测试结果如下 数据&#xff1a; curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt -o ./ragtest/input/book.txt 失败了 气死我也&#xff01;&#xff01;&#xff01;对deepseek-V3也不是很友好啊&#xff0c;我没钱prompt 微调啊&#xff0c;晕死…

ccfcsp3402矩阵重塑(其二)

//矩阵重塑&#xff08;其二&#xff09; #include<iostream> using namespace std; int main(){int n,m,t;cin>>n>>m>>t;int c[10000][10000];int s0,sum0;int d[10000],k[100000];for(int i0;i<n;i){for(int j0;j<m;j){cin>>c[i][j];d[s…

算法-除自身以外数组的乘积

力扣题目&#xff1a;238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums…

Unity Shader - UI Sprite Shader之简单抠图效果

Sprite抠图效果&#xff1a; 前言 在PhotoShop中我们经常会用到抠图操作&#xff0c;现在就用Shader实现一个简单的抠图效果。 实现原理&#xff1a; 使用当前像素颜色与需要抠掉的颜色相减作比较&#xff0c;然后与一个指定的阈值比较以决定是否将其显示出来&#xff1b; U…

【Mac】安装 Parallels Desktop、Windows、Rocky Linux

一、安装PD 理论上&#xff0c;PD只支持试用15天&#xff01;当然&#xff0c;你懂的。 第一步&#xff0c;在 Parallels Desktop for Mac 官网 下载 Install Parallels Desktop.dmg第二步&#xff0c;双击 Install Parallels Desktop.dmg 第三步&#xff0c;双击安装Paralle…

学习单片机需要多长时间才能进行简单的项目开发?

之前有老铁问我&#xff0c;学单片机到底要多久&#xff0c;才能进行简单的项目开发&#xff1f;是三个月速成&#xff0c;还是三年磨一剑&#xff1f; 今天咱们就来聊聊这个话题&#xff0c;我不是什么高高在上的专家&#xff0c;就是个踩过无数坑、烧过几块板子的“技术老友”…

pyqt 上传文件或者文件夹打包压缩文件并添加密码并将密码和目标文件信息保存在json文件

一、完整代码实现 import sys import os import json import pyzipper from datetime import datetime from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,QPushButton, QLineEdit, QLabel, QFileDialog,QMessageBox, QProgressBar) from PyQt5.…

centos操作系统上传和下载百度网盘内容

探序基因 整理 进入百度网盘官网百度网盘 客户端下载 下载linux的rpm格式的安装包 在linux命令行中输入&#xff1a;rpm -ivh baidunetdisk_4.17.7_x86_64.rpm 出现报错&#xff1a; 错误&#xff1a;依赖检测失败&#xff1a; libXScrnSaver 被 baidunetdisk-4.17.7-1.x8…

LeetCode134☞加油站

关联LeetCode题号134 本题特点 贪心局部最优解-部分差值 如果小于0&#xff08;消耗大于油站油量&#xff09; 就从下一个加油站开始&#xff0c;因为如果中间有小于0的情况 当前站就不可能是始发站&#xff0c;整体最优解-整体差值 如果小于0 &#xff0c;那么就是不能有始发…

基于 Verilog 的时序设计:从理论到实践的深度探索

在数字电路设计领域,时序设计是一个至关重要的环节,它涉及到组合逻辑电路与时序逻辑电路的设计差异、时钟信号的运用以及触发器的工作原理等多个方面。本文将围绕基于 Verilog 的时序设计实验展开,详细阐述实验过程、代码实现以及结果分析,帮助读者深入理解时序设计的核心概…

蓝牙系统的核心组成解析

一、硬件层&#xff1a;看得见的物理载体 1. 射频模块&#xff08;Radio Frequency Module&#xff09; 专业描述&#xff1a;工作在2.4GHz ISM频段&#xff0c;支持GFSK/π/4 DQPSK/8DPSK调制方式 功能类比&#xff1a;相当于人的"嘴巴"和"耳朵" 发射端…

猎豹移动(Cheetah Mobile)

本文来自腾讯元宝 公司背景与发展历程 ​成立与早期定位 猎豹移动成立于2010年11月&#xff0c;由金山安全与可牛影像合并而成&#xff0c;初期以移动安全工具和清理软件为核心业务。其明星产品包括《猎豹清理大师》&#xff08;Clean Master&#xff09;和《猎豹浏览器》&…