学习日记-day34-6.20

知识点:

1.快速入门 

知识点

核心内容

重点

IOC容器创建

通过ClassPathXmlApplicationContext加载XML配置文件创建容器,关联beans.xml

容器与配置文件的绑定关系(多配置文件支持)

Bean获取方式

1. getBean(String id)返回Object需强转;

2. getBean(String id, Class<T> type)直接返回目标类型

方法重载区别(编译类型与运行类型验证)

运行类型验证

通过getClass()输出对象实际类型,确认Spring容器管理的Bean实例

强转前提是配置的全路径类名正确

属性访问

强转后直接调用Bean的getter方法(如getName())获取配置属性

XML配置属性与类字段的映射关系

容器结构

ApplicationContext接口的多种实现类(如FileSystemXmlApplicationContext)

不同实现类的适用场景(未展开)

测试框架集成

使用JUnit测试Spring Bean,演示@Test注解和断言逻辑

版本兼容性问题(提及JUnit 5.4)

2.类加载路径

知识点

核心内容

重点

Spring类加载路径机制

程序运行时默认从out/production/[项目名]目录读取资源文件(如beans.xml),而非直接读取src下的源文件

类路径与实际文件路径的差异(src vs out/production)

ClassPathXmlApplicationContext工作原理

通过new ClassPathXmlApplicationContext("beans.xml")加载配置文件时,自动基于类加载路径定位文件

需明确beans.xml必须存在于编译后的资源目录(如resources文件夹或src编译产物)

类路径验证方法

使用this.getClass().getResource("/").getPath()输出实际类加载路径

动态验证路径与预期是否一致(如IDE构建工具差异)

资源文件部署逻辑

src下的配置文件在编译后会自动复制到out/production对应目录

子目录结构需保持一致性(如src/com/config → out/production/com/config)

3.Debug配置

知识点

核心内容

重点

Spring容器结构分析

通过debug方式观察Spring容器内部结构,理解其机制

容器数据视图差异(配置导致显示不同)

OOP编程思想

强调通过debug输出对象结构是高效学习方式

对象结构可视化的重要性

IDEA调试配置

Settings > Debugger > Data Views控制debug数据展示逻辑

空元素显示开关(Hide null elements)和视图简化开关(Enable alternative view)

Step Into源码调试

需取消勾选Do not step into the classes以进入指定类源码

默认配置可能阻止进入JDK/库类源码

Debug视图差异根源

数据展示差异由Data Views配置项决定,非版本问题

配置一致性对协作调试的影响

ConcurrentHashMap结构

通过beanDefinitionMap的table数组观察实际存储结构

空元素隐藏可能导致误解底层结构

4.Spring容器结构剖析

知识点

核心内容

重点

Spring IOC容器结构

IOC容器是重量级对象,通常单例存在,内部通过ConcurrentHashMap存储Bean定义信息

BeanDefinitionMapSingletonObjects的区别(定义信息 vs 实例化对象)

BeanDefinition存储机制

配置的Bean信息(如monster类路径、属性值)存储在BeanDefinitionMap的ConcurrentHashMap中(初始大小512)

懒加载(lazy-init)与立即加载的触发时机

Bean实例化过程

单例对象实际存储在SingletonObjects的ConcurrentHashMap中,Key为Bean ID,Value为实例化对象

反射创建对象依赖BeanDefinition中的类路径和属性值

ConcurrentHashMap底层结构

使用Node内部类(哈希值+Key+Value+链表结构)存储数据,支持高并发

哈希算法定位泛型设计(适应不同Bean类型)

属性值注入逻辑

propertyValues字段记录XML配置的属性(如monsterId=100),通过反射注入到实例化对象

动态创建非单例Bean时如何复用属性配置

5.Spring容器结构剖析

知识点

核心内容

重点

IOC容器结构

容器类型为ClassPathXmlApplicationContext,包含BeanFactory等属性

BeanFactory与ApplicationContext的区别

BeanDefinitionMap

使用ConcurrentHashMap存储XML配置的Bean节点信息

并发容器选择原因(线程安全 vs 性能)

Bean存储机制

通过哈希算法将Bean信息存入数组(初始容量512),动态扩容

哈希冲突处理与扩容触发条件

Bean节点解析

保存Bean的ID、类信息、属性值、懒加载配置等

懒加载与立即加载的底层实现差异

属性映射

PropertyValues数组存储XML中配置的属性名和值

反射注入属性时的类型转换问题

底层模拟实现

手写Spring需模拟BeanDefinitionMap和ConcurrentHashMap结构

Node节点中KV的设计(Key=Bean ID, Value=元数据)

6.Spring容器结构剖析

知识点

核心内容

重点

Spring容器结构

bin factory中的single objects属性存储单例对象

区分bind ebinishm AP(定义map)和single objects(实例对象)

单例模式实现

通过concurrent hash map实现线程安全的单例存储

单例对象直接初始化放入table,非单例则动态创建

对象获取流程

get bin时先查bin definition,再根据单例标识决定从缓存获取或反射创建

理解ID->定义->实例的三层跳转逻辑

辅助设计机制

bin definition namesarray list存储所有配置的ID名称

快速定位功能与容器性能的平衡设计

IOC容器本质

beans点插门文件配置信息与运行时容器对象的映射关系

配置元数据(bin definition)与实际实例(single objects)的分离

7.Spring容器结构练习

知识点

核心内容

重点

IOC容器结构

讲解IOC容器的核心结构及其重要性,理解结构后能更清晰掌握Spring相关方法

容器结构的逻辑关系、bin definition names属性的作用

获取容器中的Bean信息

通过getBinDefinitionNames()方法获取所有Bean的ID,并遍历输出

getBinDefinitionNames()返回的是数组结构,需注意遍历方式

Bean的配置与ID唯一性

配置多个Bean时,ID必须唯一,否则会导致冲突;类型可以相同,但值不同

ID冲突问题、Bean的作用域(单例/原型)

Debug视图优化

调整Debug视图过滤空元素,简化数据结构展示,便于观察Bean的存储位置

视图配置方法、singleObjects和binDefinitionMap的实际存储结构

Spring容器启动时的默认Bean

容器启动时会预先加载系统默认的单例Bean(如applicationStartup、lifecycleProcessor等)

系统Bean的作用、自定义Bean与系统Bean的区分

8.实现简单基于XML配置程序 需求说明

知识点

核心内容

重点

Spring容器基础实现

手动开发基于XML配置的简易Spring容器,读取beans.xml文件并实例化首个JavaBean(如master对象)

属性注入与容器存储逻辑(需区分原生框架与模拟实现的差异)

XML配置解析

通过property标签获取Bean属性值(如name="牛魔王"、id=100),完成对象赋值

文件解析顺序(仅处理首个Bean,非全量遍历)

容器机制模拟

实现getBean()方法输出对象信息,简化版IoC流程(创建→赋值→存储→输出)

与Spring原生容器的核心差异(如生命周期管理、依赖注入等)

实践目标

理解Spring底层机制(强调流程梳理,非完整功能复现)

需明确"超级简单"实现与工业级容器的边界

9.实现简单基于XML配置程序 思路分析

知识点

核心内容

重点

Spring容器实现机制

通过XML解析、反射和ConcurrentHashMap实现简易IoC容器

单例对象存储方式 vs 原型模式

DOM4J技术应用

解析beans.xml配置文件获取bean定义信息

class路径解析与异常处理

反射机制

通过无参构造器创建对象并动态设置属性值

属性注入与类型转换问题

容器设计模式

使用ConcurrentHashMap存储单例bean对象

并发控制与线程安全问题

简易IoC流程

1. XML解析 → 2. 反射实例化 → 3. 属性注入 → 4. 容器注册 → 5. getBean方法

流程顺序与各环节异常处理

工程简化原则

聚焦核心机制(单例处理)而非完整功能

遍历逻辑与扩展性设计取舍

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

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

相关文章

如何使用 neptune.ai 优化模型训练期间的 GPU 使用率

GPU 可以大大加速深度学习模型的训练&#xff0c;因为它们专门用于执行神经网络核心的张量运算。 由于 GPU 是昂贵的资源&#xff0c;因此充分利用它们至关重要。GPU 使用率、内存利用率和功耗等指标可以洞悉资源利用率及其改进潜力。提高 GPU 使用率的策略包括混合精度训练、优…

腾讯混元3D制作简单模型教程-1

腾讯混元3D制作简单模型的零门槛教程,涵盖新手快速入门与进阶操作,结合官方工具特性及行业实践,分为两个核心板块: 🎯 一、新手零门槛:5分钟生成可打印模型(适合完全小白) 通过腾讯元宝APP的“3D角色梦工厂”功能,无需任何建模基础: 上传照片 打开腾讯元宝APP → …

一个库,比如kott_tinymce ,想把的依赖库从kotti升级到kotti2 ,请问我是不是查找替换,把所有的kotti字符替换成kotti2就行了?

一个库&#xff0c;比如kott_tinymce ,想把的依赖库从kotti升级到kotti2 &#xff0c;请问我是不是查找替换&#xff0c;把所有的kotti字符替换成kotti2就行了&#xff1f; kotti和kotti2的包结构、模块路径、接口完全一样&#xff0c;除了import kotti 变成kotti2 如果 kotti…

企业实践 | 银河麒麟KylinOS-V10(SP3)高级服务器操作系统基础安装指南

前言&#xff1a;国产操作系统的崛起与实践背景 在国产化浪潮与信息技术自主可控的大背景下&#xff0c;银河麒麟操作系统作为国产操作系统的代表之一&#xff0c;正逐步成为企业级应用的重要选择。本文将详细介绍银河麒麟高级服务器操作系统V10 SP3版本的基础知识与安装实践&…

Ubuntu 一键安装 ROS

Ubuntu 一键安装 ROS 安装命令如下&#xff1a; wget http://fishros.com/install -O fishros && . fishros 指令执行后&#xff0c;显示log如下图&#xff1a; 之后根据不同的系统安装对应的ros版本即可。

深度学习——基于卷积神经网络实现食物图像分类【4】(使用最优模型)

文件目录 引言一、环境准备二、数据预处理训练集预处理说明&#xff1a;验证集预处理说明&#xff1a; 三、自定义数据集类四、设备选择五、CNN模型构建六、模型加载与评估1. 加载预训练模型2. 准备测试数据3. 测试函数4. 计算准确率 七、完整代码八、总结 引言 本文将详细介绍…

C++基础算法————并查集

C++并查集详解与实战指南 一、引言 并查集(Union-Find)是一种高效的数据结构,用于处理一些不相交集合的合并与查询问题。它在图论、社交网络、网络连通性等领域有广泛的应用。并查集的核心思想是通过一个数组来记录每个元素的父节点,从而将元素组织成若干棵树,每棵树代表…

系统性能优化的关键手段

系统性能的提升方向 服务器并发处理能力&#xff1a;通过优化内存管理策略、选择合适的连接模式&#xff08;长连接或短连接&#xff09;、改进 I/O 模型&#xff08;如 epoll、IOCP&#xff09;、以及采用高效的服务器并发策略&#xff08;如多线程、事件驱动等&#xff09;&a…

httpclient实现http连接池

HTTP连接池是一种优化网络通信性能的技术&#xff0c;通过复用已建立的TCP连接减少重复握手开销&#xff0c;提升资源利用率。以下是关键要点&#xff1a; 核心原理与优势 ‌连接复用机制‌ 维护活跃连接队列&#xff0c;避免每次请求重复TCP三次握手/SSL协商&#xff0c;降低…

广义焦点丢失:学习用于密集目标检测的合格和分布式边界盒之GFL论文阅读

摘要 一阶段检测器通常将目标检测形式化为密集的分类与定位(即边界框回归)问题。分类部分通常使用 Focal Loss 进行优化,而边界框位置则在狄拉克δ分布下进行学习。最近,一阶段检测器的发展趋势是引入独立的预测分支来估计定位质量,所预测的质量可以辅助分类,从而提升检…

Real-World Deep Local Motion Deblurring论文阅读

Real-World Deep Local Motion Deblurring 1. 研究目标与实际问题意义1.1 研究目标1.2 实际问题1.3 产业意义2. 创新方法:LBAG模型与关键技术2.1 整体架构设计2.2 关键技术细节2.2.1 真实模糊掩码生成(LBFMG)2.2.2 门控块(Gate Block)2.2.3 模糊感知补丁裁剪(BAPC)2.3 损…

【Docker基础】Docker镜像管理:docker commit详解

目录 引言 1 docker commit命令概述 1.1 什么是docker commit 1.2 使用场景 1.3 优缺点分析 2 docker commit命令详解 2.1 基本语法 2.2 常用参数选项 2.3 实际命令示例 2.4 提交流程 2.5 步骤描述 3 docker commit与Dockerfile构建对比 3.1 构建流程对比 3.2 对…

可调式稳压二极管

1.与普通稳压二极管的比较&#xff1a; 项目普通稳压二极管可调式稳压二极管&#xff08;如 TL431&#xff09;输出电压固定&#xff08;如5.1V、3.3V&#xff09;可调&#xff08;2.5V ~ 36V&#xff0c;取决于外部分压&#xff09;精度低&#xff08;5%~10%&#xff09;高&a…

Kafka使用Elasticsearch Service Sink Connector直接传输topic数据到Elasticsearch

链接&#xff1a;Elasticsearch Service Sink Connector for Confluent Platform | Confluent Documentation 链接&#xff1a;Apache Kafka 一、搭建测试环境 下载Elasticsearch Service Sink Connector https://file.zjwlyy.cn/confluentinc-kafka-connect-elasticsearch…

讯方“教学有方”平台获华为昇腾应用开发技术认证!

教学有方 华为昇腾应用开发技术认证 权威认证 彰显实力 近日&#xff0c;讯方技术自研的教育行业大模型平台——“教学有方”&#xff0c;成功获得华为昇腾应用开发技术认证。这一认证不仅是对 “教学有方” 平台技术实力的高度认可&#xff0c;更标志着讯方在智慧教育领域的…

保护你的Electron应用:深度解析asar文件与Virbox Protector的安全策略

在现代软件开发中&#xff0c;Electron框架因其跨平台特性而备受开发者青睐。然而&#xff0c;随着Electron应用的普及&#xff0c;如何保护应用中的核心资源文件——asar文件&#xff0c;成为了开发者必须面对的问题。今天&#xff0c;我们将深入探讨asar文件的特性&#xff0…

端口安全配置示例

组网需求 如图所示&#xff0c;用户PC1、PC2、PC3通过接入设备连接公司网络。为了提高用户接入的安全性&#xff0c;将接入设备Router的接口使能端口安全功能&#xff0c;并且设置接口学习MAC地址数的上限为接入用户数&#xff0c;这样其他外来人员使用自己带来的PC无法访问公…

零基础RT-thread第四节:电容按键

电容按键 其实只需要理解&#xff0c;手指按上去后充电时间变长&#xff0c;我们可以利用定时器输入捕获功能计算充电时间&#xff0c;超过无触摸时的充电时间一定的阈值就认为是有手指触摸。 基本原理就是这样&#xff0c;我们开始写代码&#xff1a; 其实&#xff0c;看过了…

SQL基础操作:从增删改查开始

好的&#xff01;SQL&#xff08;Structured Query Language&#xff09;是用于管理关系型数据库的标准语言。让我们从最基础的增删改查&#xff08;CRUD&#xff09;​​ 操作开始学习&#xff0c;我会用简单易懂的方式讲解每个操作。 &#x1f6e0; 准备工作&#xff08;建表…

vim 编辑模式/命令模式/视图模式常用命令

以下是一份 Vim 命令大全&#xff0c;涵盖 编辑模式&#xff08;Insert Mode&#xff09;、命令模式&#xff08;Normal Mode&#xff09; 和 视图模式&#xff08;Visual Mode&#xff09; 的常用操作&#xff0c;适合初学者和进阶用户使用。 &#x1f9fe; Vim 模式简介 Vim…