当前位置: 首页 > news >正文

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 的 接口上打断点,调试时会自动跳转到对应的接口实现类。

调试过程中,遇到不懂的,也可以百度搜索下。

http://www.lryc.cn/news/390904.html

相关文章:

  • 【代码随想录训练营】【Day 63】【单调栈-2】| Leetcode 42, 84
  • CTF常用sql注入(一)联合注入和宽字节
  • 薄冰英语语法学习--冠词1
  • 基于Java中的SSM框架实现野生动物公益保护系统项目【项目源码+论文说明】计算机毕业设计
  • c->c++(二):class
  • 11 UDP的可靠传输协议QUIC
  • 14-20 Vision Transformer用AI的画笔描绘新世界
  • LVS FILTER UNUSED OPTION
  • Python后端面试题
  • docker打包 arm32v7/debian 问题总结
  • 【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十)
  • Vuetify3:监听当前手机还是电脑
  • Zabbix 配置钉钉告警
  • TTL转RS232与USB转TTL
  • 【力扣 896】单调数列 C++题解(循环)
  • 代码随想录Day71(图论Part07)
  • [Mdp] lc 494. 目标和(01背包变种+dp+dfs)
  • React vs Vue:谁是构建现代Web应用的王者?
  • Linux CentOS 宝塔中禁用php8.2的eval函数详细图文教程
  • Matlab 中 fftshift 与 ifftshift
  • 被裁了(9年)
  • 13. Revit API: Filter(过滤器)
  • hadoop 3.X 分布式HA集成Kerbos(保姆级教程)
  • VDS虚拟导播切换台软件
  • UE4_材质_使用彩色半透明阴影
  • arthas监控工具笔记(二)monior等
  • 【mybatis】mybatis-plus中主键生成策略
  • 模型情景制作-如何制作棕榈树
  • # mysql 中文乱码问题分析
  • [小试牛刀-习题练]《计算机组成原理》之指令系统