【Spring详解一】Spring整体架构和环境搭建

一、Spring整体架构和环境搭建

1.1 Spring的整体架构

Spring框架是一个分层架构,包含一系列功能要素,被分为大约20个模块

  • Spring核心容器:包含Core、Bean、Context、Expression Language模块
    • Core :其他组件的基本核心,主要包含Spring框架基本的核心工具类
    • Beans :包含访问配置文件、创建和管理bean以及IOC/DI(控制反转和依赖注入)操作相关的所有类
    • Context :构建与Core和Beans基础之上,继承BeanFactory,提供上下文信息,扩展出JNDI、EJB、电子邮件、国际化等功能
    • Expression Language :提供了一个强大的语言表达式用于在运行时查询和操纵对象。
  • Spring数据访问与集成
    • JDBC :提供了JDBC的抽象层
    • ORM :提供了JPA、JDO、Hibernate、iBatis 等ORM映射层
    • OXM :提供了Object/XML映射实现的抽象层,该实现包括JAXB、Castor、XMLBeans、JiBX和XStream
    • JMS(Java Messaging Service) :制造和消费消息
    • Transaction :编程和声明性的事务管理
  • Spring AOP:集成了所有AOP功能
  • Spring Web与远程调用
    • Web :提供了基础的 Web 开发的上下文信息,现有的Web框架,如JSF、Tapestry、Structs等,提供了集成
    • Web MVC:提供了 Web 应用的 Model-View-Controller 全功能实现。
    • Websocket

1.2 Spring环境搭建

1.2.1 安装git

Git - Downloads

1.2.2 安装Gradle

1.)下载安装包

下载地址:  Gradle Distributions

2)配置环境变量

#1.打开.bash_profile文件
open -e ~/.bash_profile
#2.在.bash_profile文件中配置环境变量
GRADLE_HOME=//Users/sunshine/Documents/software/gradle/gradle-7.5.1
export GRADLE_HOME
export PATH=$PATH:$GRADLE_HOME/bin

3)查看Gradle版本

gradle -version

1.2.3 下载Spring源码

git clone git@github.com:spring-projects/spring-framework.git
git clone https://github.com/spring-projects/spring-framework.git

我使用的是5.3.x分支。

注意:要使用 git@github.com:spring-projects/spring-framework.git 需要配置ssh秘钥:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
//会生成私钥文件 id_rsa 和公钥文件 id_rsa.pub
//windows 一般在 C:\Users\Administrator\.ssh 目录,linux和mac在 ~/.ssh
//把生成的公钥拷贝到GitHub 的设置中的 SSH 密钥部分

如果使用 https 超时,可以增加 Git 的 HTTP/HTTPS 超时时间:

git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999

如果使用了VPN代理服务器,确保 Git 的代理设置是正确的。你可以通过以下命令检查或设置代理:

//查看当前代理设置
git config --global --get http.proxy
//设置代理
git config --global http.proxy http://proxy_host:port
git config --global https.proxy https://proxy_host:port
//取消代理设置
git config --global --unset http.proxy
git config --global --unset https.proxy

1.2.4 配置IDEA

配置IDEA的本地gradle环境:

配置项目字节码版本:

最后在 Project Structure 配置sdk版本。

1.2.5 配置 Spring-Framework 源码的gradle仓库

配置gradle下载地址为本地(路径为gradle二进制文件压缩包路径):

//文件为 gradle/wrapper/gradle-wrapper.properties
distributionUrl=file:///F:/work_folder/gradle-7.5.1-bin.zip

配置仓库镜像 :

//根目录下文件\buildSrc\build.gradle
repositories {maven { url 'https://maven.aliyun.com/repository/public/' }maven { url 'https://maven.aliyun.com/repository/central' }mavenCentral()gradlePluginPortal()
}

根目录下文件\build.gradle 的 mavenCentral() 之前加上:

maven { url 'https://maven.aliyun.com/repository/public/' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }

1.2.6 新建模块,测试环境

添加依赖 /spring-f2-test/build.gradle :

添加测试类:

public class User {String name;public User(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +'}';}
}@Configuration
public class JavaConfig {@Beanpublic User user(){return new User("lister");}
}public class TestApplication {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);User user = (User) context.getBean("user");System.out.println(user);}
}
//结果打印
User{name='lister'}

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

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

相关文章

Linux内核读写锁与读写信号量的区别及选用

在Linux内核中,读写锁(rwlock_t)和读写信号量(struct rw_semaphore)是两种不同的同步机制,适用于不同的场景。以下是它们的区别和选用建议: 核心区别 特性读写锁 (rwlock_t)读写信号量 (struct…

用openresty和lua实现壁纸投票功能

背景 之前做了一个随机壁纸接口,但是不知道大家喜欢对壁纸的喜好,所以干脆在实现一个投票功能,让用户给自己喜欢的壁纸进行投票。 原理说明 1.当访问http://demo.com/vote/时,会从/home/jobs/webs/imgs及子目录下获取图片列表&…

LLaMA 3.1 模型在DAMODEL平台的部署与实战:打造智能聊天机器人

文章目录 前言 一、LLaMA 3.1 的特点 二、LLaMA3.1的优势 三、LLaMA3.1部署流程 (一)创建实例 (二)通过JupyterLab登录实例 (3)部署LLaMA3.1 (4)使用教程 总结 前言 LLama3…

【Python爬虫(25)】解锁Python爬虫:数据存储的最优选择与高效策略

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

【复现DeepSeek-R1之Open R1实战】系列8:混合精度训练、DeepSpeed、vLLM和LightEval介绍

这里写目录标题 1 混合精度训练1.1 FP16和FP321.2 优点1.3 存在的问题1.4 解决办法 2 DeepSpeed3 vLLM3.1 存在的问题3.2 解决方法3.2.1 PagedAttention3.2.2 KV Cache Manager3.2.3 其他解码场景 3.3 结论 4 LightEval4.1 主要功能4.2 使用方法4.3 应用场景 本文继续深入了解O…

使用 FFmpeg 剪辑视频指南

FFmpeg 是一个功能强大的多媒体处理工具,可以进行视频和音频的剪辑、合并、转码等操作。本文将详细介绍如何使用 FFmpeg 进行视频剪辑,并通过实例帮助你快速掌握剪辑技巧。我们会从最基础的剪切功能讲起,再延伸到一些高级操作,如指…

【分布式理论15】分布式调度1:分布式资源调度的由来与过程

文章目录 一、操作系统的资源调度:从单核到多核二、 分布式系统的资源调度:从单台服务器到集群三、 固定资源映射四、 动态资源分配:灵活的任务-资源匹配五、 资源调度过程:从申请到执行 本文主要讨论主题: 从操作系统…

【Linux C/C++开发】Linux系统轻量级的队列缓存mqueue

前言 开发设计时,通常会对业务流程进行模块化,有些流程之间,不要求同步,但又需要传递信息时,如果存储到数据库,效率降低很多,如果是存放在内存是最好的。此时可以选择系统的IPC(进程…

Vue 实现通过URL浏览器本地下载 PDF 和 图片

1、代码实现如下: 根据自己场景判断 PDF 和 图片,下载功能可按下面代码逻辑执行 const downloadFile async (item: any) > {try {let blobUrl: any;// PDF本地下载if (item.format pdf) {const response await fetch(item.url); // URL传递进入i…

计算机网络基础杂谈(局域网、ip、子网掩码、网关、DNS)

目录 1. 简单局域网的构成 2. IP 地址 3. 子网掩码 4. IP地址详解自定义IP 5. IP 地址详解 6. 网关 7. DNS 域名解析 8. ping 1. 简单局域网的构成 交换机是组建局域网最重要的设备,换句话说,没有交换机就没法搭建局域网 交换机不能让局域网连…

Thor: 统一AI模型网关的革新之选

项目价值 Thor(雷神托尔)作为一个强大的AI模型管理网关,解决了当前AI领域一个关键痛点:不同AI服务商的API格式各异,集成成本高。Thor通过将各种AI模型的独特格式统一转换为OpenAI格式,显著降低了开发者的使用门槛和维护成本。 核…

25年2月通信基础知识补充:多普勒频移与多普勒扩展、3GPP TDL信道模型

看文献过程中不断发现有太多不懂的基础知识,故长期更新这类blog不断补充在这过程中学到的知识。由于这些内容与我的研究方向并不一定强相关,故记录不会很深入请见谅。 【通信基础知识补充7】25年2月通信基础知识补充1 一、多普勒频移与多普勒扩展傻傻分不…

【Python】Python入门——笔记合集

哈哈 00、环境搭建 学习Python,首先需要搭建一个本地开发环境,或是使用线上开发环境(各类练习网站),这篇博客里主要记录了本地开发环境的配置方法。内容包括python解释器的安装以及pycharm的安装、汉化等。 博客地…

为什么mvcc中?m_ids 列表并不等同于 min_trx_id 和 max_trx_id 之间的所有事务 ID

首先我们要明确 m_ids 表示创建 ReadView 时,系统中所有活跃(未提交)事务的事务 ID 列表。 仅包含当前未提交的事务,与事务 ID 的数值范围无关。 min_trx_id 是 m_ids 中的最小值。若 m_ids 为空,则 min_trx_id 等于…

使用 Spark NLP 实现中文实体抽取与关系提取

在自然语言处理(NLP)领域,实体抽取和关系提取是两个重要的任务。实体抽取用于从文本中识别出具有特定意义的实体(如人名、地名、组织名等),而关系提取则用于识别实体之间的关系。本文将通过一个基于 Apache Spark 和 Spark NLP 的示例,展示如何实现中文文本的实体抽取和…

FPGA开发要学些什么?如何快速入门?

随着FPGA行业的不断发展,政策的加持和投入的研发,近两年FPGA行业的薪资也是水涨船高,一些人转行后拿到了薪资30W,甚至有一些能力强的人可以拿到60W,看到这里想必不少人表示很心动,但又不知道怎么转&#xf…

使用Python和正则表达式爬取网页中的URL数据

在数据抓取和网络爬虫开发中,提取网页中的URL是一个常见的需求。无论是用于构建网站地图、分析链接结构,还是进行内容聚合,能够高效地从HTML文档中提取URL都是一个重要的技能。Python作为一种强大的编程语言,结合其正则表达式模块…

人工智能之目标追踪DeepSort源码解读(yolov5目标检测,代价矩阵,余弦相似度,马氏距离,匹配与预测更新)

要想做好目标追踪,须做好目标检测,所以这里就是基于yolov5检测基础上进行DeepSort,叫它为Yolov5_DeepSort。整体思路是先检测再追踪,基于检测结果进行预测与匹配。 一.参数与演示 这里用到的是coco预训练人的数据集: 二.针对检测结果初始化track 对每一帧数据都输出…

C++蓝桥杯基础篇(四)

片头 嗨~小伙伴们,大家好!今天我们来学习C蓝桥杯基础篇(四),继续练习相关习题。准备好了吗?咱们开始咯~ 题目1 连续整数相加 思路分析: 这道题,我们可以把从键盘中读取n写在while循…

YOLOv12从入门到入土(含结构图)

论文链接:https://arxiv.org/abs/2502.12524 代码链接:https://github.com/sunsmarterjie/yolov12 文章摘要: 长期以来,增强YOLO框架的网络架构一直至关重要,但一直专注于基于cnn的改进,尽管注意力机制在建…