搭建一个简单的Spring Demo

要学习Spring 源码,一个是从Spring GitHub 上去down源码,然后倒入IDEA编译,但这种方法费时费力,如果你不需要对Spring 源码进行修改后,再编译的话,直接搭建一个Spring Demo 的Maven项目,引入Spring 对应依赖,下载源码包,通过Demo来学习。
本专栏就通过该Demo来学习Spring 源码,并将相关内容记录到该专栏中。

Spring Demo项目地址:https://github.com/jujunchen/Spring-Demo

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>spring-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.31</version>
        </dependency>
    </dependencies>

</project>

这里引入了spring-context依赖,做为最基本的spring依赖,因为其包含了主要的Spring特性spring-beans、spring-aop、spring-context、spring-core、spring-expression、spring-jcl

Test

Bean.java

package com.spring.test.demo.bean;

import org.springframework.stereotype.Component;

@Component
public class Bean {

    public void print() {
        System.out.println("Spring Test");
    }
}

SpringTest.java

package com.spring.test.demo;

import com.spring.test.demo.bean.Bean;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class SpringTest {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        applicationContext.register(Bean.class);
        applicationContext.refresh();
        Bean bean = applicationContext.getBean(Bean.class);
        bean.print();
    }
}

测试结果

image.png

Spring 模块

进度

模块描述
spring-aop要使用AOP相关的功能(事务、切面)需要包含该模块
spring-aspects包含AspectJ AOP库进行高级集成的所有类
spring-beans包含对Spring bean进行操作的类
spring-beans-groovy对Spring bean进行操作的Groovy类
spring-context包含Spring Core提供的许多扩展类,如ApplicationContext
spring-context-indexer包含一个索引器实现,
它提供对META-INF/spring.components 中定义的候选项的访问功能,但核心类CandidateComponentsIndex 并不能再外部使用
spring-context-support该模块是对spring-context模块的进一步扩展,在用户界面方面,有一些用于支持邮件并与模块引擎集成的类,还包括与各种任务执行和调度库(CommonJ和Quartz)的集成
spring-core主要模块,其他Spring模块都会依赖该模块
spring-expression包含SpEL表达式的支持类
spring-instrument包含用于JVM启动的Spring工具代理,如果在Spring应用程序中使用AspectJ实现加载织入,那么该模块是必需的
spring-jcl日志框架
spring-jdbc包含所有的JDBC支持类
spring-jms所有JMS支持类
spring-messaging提供消息传递的基础结构和协议
spring-orm扩展了Spring的标准JDBC功能集,支持流行的ORM工具,包含Hibernate、JDO、JPA和数据映射器IBATIS。该JAR文件中的许多类都依赖于spring-jdbc JAR文件中所包含的类,因此也需要把它包含在程序中
spring-oxm为Object/XML映射OXM提供支持,用于抽象XML编组和解组以及支持Castor、JAXB、XMLBeans和XStream等常用工具的类都包含在此模块中
spring-testSpring提供的帮助测试程序的包
spring-tx提供支持Spring事务的所有类
spring-web包含Web程序中使用的所需核心类
spring-web-reactive响应式模型的核心接口和类
spring-webmvcSpring自己的MVC框架
spring-websocketSpring对WebSocket的支持类

作者其他要推荐的文章,欢迎来学习:
基于Spring Boot 3.1.0 系列文章

  1. Spring Boot 源码阅读初始化环境搭建
  2. Spring Boot 框架整体启动流程详解
  3. Spring Boot 系统初始化器详解
  4. Spring Boot 监听器详解
  5. Spring Boot banner详解
  6. Spring Boot 属性配置解析
  7. Spring Boot 属性加载原理解析
  8. Spring Boot 异常报告器解析
  9. Spring Boot 3.x 自动配置详解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

官宣首批 CESS 全球大使,更多席位邀您报名参与!

CESS&#xff08;Cumulus Encrypted Storage System&#xff09;很荣幸地向大家宣布「CESS 全球大使计划」的首批入选大使&#xff01; CESS 全球大使计划旨在汇聚全球对区块链技术充满热情、愿意为 CESS 生态做出贡献的建设者。该计划专注于提升社区知名度和影响力&#xff0c…

数据库复试—关系数据库标准语言SQL

数据库复试—关系数据库标准语言SQL SQL&#xff1a;结构化查询语言 以教材中的学生-课程数据库为例进行SQL基础语法的复习 数据库实验环境选择SQLServer 11 关系模式 学生表Student(Sno,Sname,Ssex,Sage,Sdept) 课程表Course(Cno,Cname,Cpno,Ccredit) 学生选课表SC&#xf…

2526. 随机数生成器(BSGS,推导)

题目路径&#xff1a; https://www.acwing.com/problem/content/2528/ 思路&#xff1a;

WPF 在DataGrid使用过程中,如果单击某一行理论就会选中哪一行,实际不能选中。DataGrid空白格不能选择行

wpf 在DataGrid使用过程中&#xff0c;如果单击某一行理论就会选中哪一行&#xff0c;但是单击的点刚好这列没有值、内容为空时&#xff0c;单击了也没有选中这一行。如果这列有值就容易选中这一行&#xff0c;这是为什么&#xff0c;如何解决&#xff1f; 确保列模板中即使没有…

Yolov8不废话!参考手册!

Yolov8使用 yolo taskdetect modetrain modelyolov8n.pt args...classify predict yolov8n-cls.yaml args...segment val yolov8n-seg.yaml args...export yolov8n.pt formatonnx args...使用Ultralytics YOLO进行模型训练 …

设置代码模板创建sql映射文件、Mybatis主配置文件

目录 1、Sql映射&#xff08;Sql Mapper&#xff09;文件的介绍 2、Mybatis的主配置文件的介绍 3、通过代码模板创建Sql映射文件 4、通过代码模板创建Mybatis主配置文件 1、Sql映射&#xff08;Sql Mapper&#xff09;文件的介绍 <?xml version"1.0" encod…

UCIE协议介绍--芯粒间互联标准

UCIE协议介绍--芯粒间互联标准 1 背景2 UCIE协议介绍2.1 协议层2.2 适配层2.3 物理层2.4 D2D接口 3 Transmission3.1 SideBand数据包3.2 SideBand包格式3.2.1 MRd/Mwr/CfgRd/CfgWr3.2.2 Completion3.2.3 Message 3.3 FDI接口信号 4 链路训练4.1 PHY LSM状态介绍 1 背景 为什么…

Windows 下使用C#开启蓝牙(未解决的坑)

需求 当程序检测到蓝牙未打开时需要程序自动将W10的蓝牙开启。 资料 Turn on/off Bluetooth radio/adapter from cmd/powershell in Windows 10 - Super User 上的这个连接是通过powershell 开启蓝牙具体代码如下 [CmdletBinding()] Param ([Parameter(Mandatory$true)][V…

代码随想录算法训练营第十三天 |239.滑动窗口最大值,347.前k个高频元素(待补充)

239.滑动窗口最大值 1、题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、文章讲解&#xff1a;代码随想录 3、视频讲解&#xff1a; 单调队列正式登场&#xff01;| LeetCode&#xff1a;239. 滑动窗口最大值_哔哩哔哩_bili…

LeetCode 热题 100 | 滑动窗口

目录 1 3. 无重复字符的最长子串 2 438. 找到字符串中所有字母异位词 菜鸟做题第二周&#xff0c;语言是 C 1 3. 无重复字符的最长子串 解题思路&#xff1a; 设置两个指针&#xff0c;左指针和右指针&#xff0c;二者之间形成窗口右指针不断右移&#xff0c;新字母被纳…

百家云BRTC的解决方案

随着网络实时通信技术&#xff08;Web Real-Time Communication&#xff0c;简称WebRTC&#xff09;的不断发展和普及&#xff0c;webRTC已成为现代互联网通讯领域的核心技术之一。它体现在方方面面比如&#xff1a; 实时视频通话&#xff1a; WebRTC 可以用于实现浏览器之间的…

开源运维监控工具Uptime Kuma本地部署并结合内网穿透实现公网访问

目录 主要功能 一、前期准备 本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用本教程安装。 本教程使用Docker部署服务&#xff0c;如何安装Docker详见&#xff1a; 二、Docker部署Uptime Kuma 三、实现公网查看网站监控 四、使用固定公网地址…

网管协议SNMPv1/v2c的配置案例

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 厦门微思网络​​​​​​ https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle O…

(二十四)Kubernetes系列之Helm3

Helm为kubernetes的包管理工具&#xff0c;就像Linux下的包管理器&#xff08;yum/apt等&#xff09;&#xff0c;可以很方便的将之前打包好的yaml文件部署到kubernetes上。 1.安装访问地址&#xff1a;https://github.com/helm/helm/releases 点击查看最新的版本&#xff0c…

2024阿里云优惠政策解读,共4点

阿里云优惠政策有哪些&#xff1f;2024年阿里云优惠政策风向改了&#xff0c;之前一直是老用户与狗的营销策略&#xff0c;今年阿里云2核2G、3M固定带宽服务器99元居然开启了老用户购买权限&#xff0c;并且续费不涨价&#xff0c;阿里云这波操作确实让用户赢麻了&#xff0c;在…

IoC 容器总结

目录 理解 IoC 实现方式 DI 实现原理 Autowired VS Resource 区别 IoC 和 DI 有什么区别 理解 IoC IoC——控制反转&#xff0c;是 Spring 框架的核心概念之一&#xff0c;是一种设计原则和编程模式&#xff0c;用于实现松耦合和可测试的应用程序 控制反转&#xff1a;对…

多特征变量序列预测(六) CEEMDAN+CNN-Transformer风速预测模型

目录 往期精彩内容&#xff1a; 前言 1 多特征变量数据集制作与预处理 1.1 导入数据 1.2 CEEMDAN分解 1.3 数据集制作与预处理 2 基于Pytorch的CEEMDAN CNN-Transformer 预测模型 2.1 定义CEEMDAN CNN-Transformer预测模型 2.2 设置参数&#xff0c;训练模型 3 模型…

《WebKit 技术内幕》学习之八(1):硬件加速机制

《WebKit 技术内幕》之八&#xff08;1&#xff09;&#xff1a;硬件加速机制 1 硬件加速基础 1.1 概念 这里说的硬件加速技术是指使用GPU的硬件能力来帮助渲染网页&#xff0c;因为GPU的作用主要是用来绘制3D图形并且性能特别好&#xff0c;这是它的专长所在&#xff0c;它…

现代密码学基础(2)

目录 一. 介绍 二. 举例&#xff1a;移位密码 &#xff08;1&#xff09;密文概率 &#xff08;2&#xff09;明文概率 三. 举例&#xff1a;多字母的移位密码 四. 完美安全 五. 举例&#xff1a;双子母的移位密码 六. 从密文角度看完美安全 七. 完美保密性质 一. 介绍…

2024年【陕西省安全员B证】免费试题及陕西省安全员B证复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年陕西省安全员B证免费试题为正在备考陕西省安全员B证操作证的学员准备的理论考试专题&#xff0c;每个月更新的陕西省安全员B证复审考试祝您顺利通过陕西省安全员B证考试。 1、【多选题】下列关于安全帽&#xf…