Spring源码(一) 如何阅读 Spring 源码
学习 Spring 的源码,也可以通过 SpringBoot 搭环境。
不管是什么源码,最好写个 demo,跑起来,然后从常用的类和方法入手,跟踪调试。
配置对象
新建一个 SpringBoot 的项目, 详情见: https://blog.csdn.net/sinat_32502451/article/details/133039001
接着在 com.example.demo.model 路径建一个类 Person,属性包括 name和 age (也可以是其它的路径,与以下的class路径一致就行) 。
public class Person {private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
然后在 resources 文件夹下,添加一个 mySpring.xml 的文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="person" class= "com.example.demo.model.Person"><property name="name" value="Tom"/><property name="age" value="1"/></bean></beans>
查看配置的对象值:
创建一个类,查看 xml 配置的对象的值:
public class MySpring {public static void main(String[] args) {//可以在以下这段代码打个断点,跟踪调试ApplicationContext context =new ClassPathXmlApplicationContext("classpath*:mySpring.xml");Person person = context.getBean("person", Person.class);System.out.println("=======>"+ person.getName());}}
在 ApplicationContext 开头的这段代码,打个断点, 然后 跟踪调试。
ClassPathXmlApplicationContext
从 xml 加载定义的 bean 对象,并且会通过 refresh 刷新 context 上下文 。
/*** Create a new ClassPathXmlApplicationContext with the given parent,* loading the definitions from the given XML files.* @param configLocations array of resource locations* @param refresh whether to automatically refresh the context,* loading all bean definitions and creating all singletons.* Alternatively, call refresh manually after further configuring the context.* @param parent the parent context* @throws BeansException if context creation failed* @see #refresh()*/public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, @Nullable ApplicationContext parent)throws BeansException {super(parent);//设置配置文件的路径setConfigLocations(configLocations);if (refresh) {//refresh()方法,负责初始化 ApplicationContext 容器。可以重点看看。refresh();}}
调试方法:
可以通过 Step Into 进入方法,也就是 Intellij Idea 的 F7 快捷键,继续跟踪。
Step Over ,也就是 Intellij Idea 的 F8 快捷键,单步调试,逐行调试。
遇到调用接口,如果不清楚是哪个接口实现类,可以直接在 Intellij Idea 的 接口上打断点,调试时会自动跳转到对应的接口实现类。
调试过程中,遇到不懂的,也可以百度搜索下。
相关文章:
Spring源码(一) 如何阅读 Spring 源码
学习 Spring 的源码,也可以通过 SpringBoot 搭环境。 不管是什么源码,最好写个 demo,跑起来,然后从常用的类和方法入手,跟踪调试。 配置对象 新建一个 SpringBoot 的项目, 详情见: https://b…...
【代码随想录训练营】【Day 63】【单调栈-2】| Leetcode 42, 84
【代码随想录训练营】【Day 63】【单调栈-2】| Leetcode 42, 84 需强化知识点 单调栈强化 题目 42. 接雨水 注意 python 数组反序用法 result [::-1] class Solution:def trap(self, height: List[int]) -> int:# n len(height)# leftMax, rightMax [0] * n, [0] * …...
CTF常用sql注入(一)联合注入和宽字节
0x01 前言 给自己总结一下sql注入的常用姿势吧,记录一下学习 0x02 联合 联合注入的关键词是union SQL的union联合注入原理是联合两个表进行注入攻击,使用union select关键词来进行联合查询。 那么为什么我们在题目中一般是只写一个呢 因为 $sql &quo…...
薄冰英语语法学习--冠词1
冠词有2个,the 和 a /an the 叫定冠词 常用形容一类事务、特指(加强)、放在转有名词前面。 就这3个 定冠词 1. 定冠词特指某个(某些)人或某个(某些)事物 Many people came here to visit the old cast…...
基于Java中的SSM框架实现野生动物公益保护系统项目【项目源码+论文说明】计算机毕业设计
基于Java中的SSM框架实现野生动物公益保护系统演示 摘要 本系统按照网站系统设计的基本流程,遵循系统开发生命周期法和结构化方法,基于Java语言设计并实现了野生动物公益保护系统。该系统基于浏览器/服务器模式,采用JSP技术,后台…...
c->c++(二):class
本文主要探讨C类的相关知识。 构造和析构函数 构造函数(可多个):对象产生时调用初始化class属性、分配class内部需要的动态内存 析构函数(一个):对对象消亡时调用回收分配动态内存 C提供默认构造和析构,…...
11 UDP的可靠传输协议QUIC
1.如何做到可靠性传输 2.UDP与TCP,我们如何选择 3.UDP如何可靠,KCP协议在哪些方面有优势 4.KCP协议精讲(重点讲解 5.OUIC时代是否已经到来 UDP如何做到可靠传输 ACK机制重传机制 重传策略序号机制(后发的包可能先到) 3 2 1-> 2 3 1重排机制 2 3 1-> 3 2 1窗口机制 流…...
14-20 Vision Transformer用AI的画笔描绘新世界
概述 毫无疑问,目前最受关注且不断发展的最重要的主题之一是使用人工智能生成图像、视频和文本。大型语言模型 (LLM) 已展示出其在文本生成方面的卓越能力。它们在文本生成方面的许多问题已得到解决。然而,LLM 面临的一个主要挑战是它们有时会产生幻觉反应。 最近推出的新模…...
LVS FILTER UNUSED OPTION
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 过滤一些版图与spice网表对不上的器件。 一般后端遇不到这个问题,因为通常是需要写到网表中的decap没有写出来造成的,如下图。...
Python后端面试题
1. 文件操作w和r的区别 在Python中,文件操作模式中的w和r都表示对文件的读写操作,但它们在打开文件时的行为有所不同: r模式: 读写:这种模式允许你同时读取和写入文件。文件必须已经存在,否则会抛出一个Fi…...
docker打包 arm32v7/debian 问题总结
1.架构不同 我的宿主是x86 ,但是打包的是arm架构 安装qemu sudo apt-get install binfmt-support qemu qemu-user-static 然后使用buildx打包 docker buildx build --no-cache --platform linux/arm/v7 -t tdc_post:1.0.1 . --load 保存tar docker save -o tdc_post.tar tdc_p…...
【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十)
课程地址: 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 30 节) P30《29.数据持久化-用户首选项》 实现数据持久化在harmonyOS中有很多种方式,比较常见的是以下两…...
Vuetify3:监听当前手机还是电脑
我们在开发的时候,实现根据移动设备或PC设备来改编一些交互样式,这个时候我们需要监听宽度,在Vuetify3中可我们可以参考 显示 & 平台配合监听即可在窗口缩小的时候判断出手机还是电脑 <template><v-app><div v-if…...
Zabbix 配置钉钉告警
Zabbix 配置钉钉告警 随着企业IT运维需求的不断增加,及时、准确地获取系统告警信息显得尤为重要。在众多告警工具中,Zabbix 因其强大的监控功能和灵活的告警机制,成为了很多企业的首选。同时,随着企业内部沟通工具的多样化&#…...
TTL转RS232与USB转TTL
USB转TTL是一种常用的通信接口转换器,它将USB(通用串行总线)接口转换为TTL(晶体管-晶体管逻辑)电平的串行接口。这种转换器在许多场景下非常有用: USB转TTL: 功能: 将计算机的USB接…...
【力扣 896】单调数列 C++题解(循环)
如果数组是单调递增或单调递减的,那么它是 单调 的。 如果对于所有 i < j,nums[i] < nums[j],那么数组 nums 是单调递增的。 如果对于所有 i < j,nums[i]> nums[j],那么数组 nums 是单调递减的。 当给定…...
代码随想录Day71(图论Part07)
53.寻宝 题目:53. 寻宝(第七期模拟笔试) (kamacoder.com) 思路:首先,我不知道怎么存这样的东西,用三维数组吗,没搞懂,果断放弃 prim算法实现 import java.util.*;class Main {publi…...
[Mdp] lc 494. 目标和(01背包变种+dp+dfs)
文章目录 1. 题目来源2. 题目解析1. 题目来源 链接:494. 目标和 2. 题目解析 方法一:dfs 数据量比较小,长度只有 20,那么针对每一个数都有两种选择,正、负,即 2 20 = 100 w 2^{20} = 100w 220=100w 差不多的时间复杂度,dfs 解决即可。时间复杂度: O ( 2 n ) O(2^{n…...
React vs Vue:谁是构建现代Web应用的王者?
在前端开发领域,React 和 Vue 是两大备受推崇的框架(React实为库),各自拥有庞大的社区和丰富的生态系统。本文旨在深入探讨这两者之间的区别,通过代码示例来分析它们各自的优势和适用场景,从而帮助开发者做…...
Linux CentOS 宝塔中禁用php8.2的eval函数详细图文教程
PHP_diseval_extension 这个方法是支持PHP8的, Suhosin禁用eval函数,不支持PHP8 一、安装 cd / git clone https://github.com/mk-j/PHP_diseval_extension.gitcd /PHP_diseval_extension/source/www/server/php/82/bin/phpize ./configure --with-php-config/ww…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
