框架学习01-Spring
一、Spring框架概述
Spring是一个开源的轻量级Java开发框架,它的主要目的是为了简化企业级应用程序的开发。它提供了一系列的功能,包括控制反转(IOC)、注入(DI)、面向切面编程(AOP)、数据访问抽象、事务管理等诸多方面。
- 历史背景
Spring的出现提供了一种更简单、更灵活的替代方案,使得Java开发者能够更高效地构建企业应用。 - 核心优势
- 轻量级:与传统的企业级框架(如EJB)相比,Spring框架本身的代码库相对较小,对应用程序的资源占用较少。
- 松耦合:通过依赖注入等机制,Spring可以有效地降低组件之间的耦合度
- 可扩展性:Spring提供了丰富的扩展点。开发者可以很方便地集成第三方库,或者根据自己的需求对Spring进行定制。
二、Spring框架的主要模块
-
核心容器(Core Container)
-
Bean Factory:这是Spring框架最核心的部分,它负责管理对象的创建、配置和生命周期。Bean Factory就像是一个对象工厂,它根据配置信息来创建和管理各种Java对象(在Spring中称为Bean)。例如,在一个简单的Spring应用中,我们可以通过XML配置文件或者Java注解来告诉Bean Factory如何创建一个用户服务(UserService)对象。

-
ApplicationContext:它是Bean Factory的扩展,提供了更多高级的功能,如国际化支持、事件发布和订阅等。它是一个完整的应用上下文环境,在实际开发中应用更为广泛。比如,在一个Web应用中,我们可以通过WebApplicationContext来获取整个Web应用相关的Bean和配置信息。
-

-
-
AOP(Aspect - Oriented Programming)模块
- AOP主要用于处理横切关注点(Cross - Cutting Concerns)。例如,日志记录、事务管理等功能往往会横跨多个业务逻辑组件。在没有AOP的情况下,我们需要在每个业务方法中重复编写日志记录或者事务管理的代码。而通过Spring AOP,我们可以将这些横切关注点抽象成独立的切面(Aspect)。比如,我们可以定义一个日志切面,通过切点(Pointcut)来指定在哪些业务方法执行前后进行日志记录,从而避免了代码的重复。
-
数据访问与集成(Data Access/Integration)模块
- JDBC抽象层:Spring对JDBC进行了抽象,提供了更简单、更方便的API来进行数据库访问。它隐藏了JDBC的一些复杂的细节,如数据库连接的获取、释放,SQL语句的执行等。例如,通过Spring的JdbcTemplate,我们可以用更少的代码来执行一个查询操作,并且可以方便地处理查询结果。
- ORM(Object - Relational Mapping)支持:Spring支持多种ORM框架,如Hibernate、MyBatis等。它可以很好地集成这些ORM框架,使得开发者可以根据自己的喜好和项目的具体需求选择合适的ORM工具。例如,在使用Spring和Hibernate集成时,Spring可以帮助管理Hibernate的SessionFactory,并且可以通过依赖注入将Hibernate相关的服务注入到业务逻辑组件中。
-
Web模块
- Spring MVC:这是Spring用于构建Web应用的MVC(Model - View - Controller)框架。它将Web应用分为模型(Model)、视图(View)和控制器(Controller)三个部分。例如,在一个简单的用户注册功能中,Controller负责接收用户提交的注册信息,Model用于处理业务逻辑(如验证用户信息、保存用户数据到数据库等),View则负责将处理后的结果展示给用户(如返回一个注册成功或失败的页面)。
三、依赖注入(Dependency Injection)在Spring中的实现
- 构造函数注入(Constructor Injection)
- 这是一种通过构造函数来注入依赖的方式(手动注入)。例如,假设我们有一个UserService类,它依赖于一个UserRepository类来进行数据访问。我们可以通过在UserService的构造函数中接收UserRepository的实例来实现注入。
- 代码示例:
public class UserService {private final UserRepository userRepository;public UserService(UserRepository userRepository) {this.userRepository = userRepository;}// 其他业务方法 }- 在Spring配置文件(可以是XML或者通过Java配置类)中,我们可以配置Spring来创建UserService和UserRepository的实例,并将UserRepository的实例注入到UserService的构造函数中。
- Setter注入(Setter Injection)
- 通过Set方法来注入依赖(手动注入)。例如,我们可以在UserService类中定义一个setUserRepository方法。
- 代码示例:
public class UserService {private UserRepository userRepository;public void setUserRepository(UserRepository userRepository) {this.userRepository = userRepository;}// 其他业务方法 }- 在Spring配置中,我们可以通过调用这个setter方法来注入UserRepository的实例。
- 注解注入(Annotation Injection)
- Spring支持多种注解来实现注入(自动注入),如
@Autowired和@Resource。例如,使用@Autowired注解,我们可以在UserService类中直接在UserRepository的成员变量上添加注解。 - 代码示例:
public class UserService {@Autowiredprivate UserRepository userRepository;// 其他业务方法 }- Spring会自动扫描带有
@Autowired注解的成员变量,并将合适的实例注入进去。
- Spring支持多种注解来实现注入(自动注入),如
四、Spring框架的应用场景
- 企业级应用开发
- 在大型企业级应用中,Spring可以用于构建多层架构的应用。例如,在一个典型的三层架构(dao层、service层、controller层)的应用中,Spring可以很好地管理各个层次之间的依赖关系,并且通过AOP来处理横切关注点,如日志记录、安全验证等。
- Web应用开发
- Spring MVC是一个非常流行的Web框架,用于开发高效、灵活的Web应用。它可以与各种视图技术(如Thymeleaf、JSP等)结合使用,并且可以方便地进行RESTful API的开发。例如,我们可以使用Spring MVC来开发一个电商网站的后端API,用于处理商品信息的查询、添加、修改等操作。
- 微服务架构
- 在微服务架构中,Spring Boot(基于Spring框架构建的快速开发框架)被广泛应用。Spring Boot简化了微服务的开发和部署过程,通过自动配置等功能,使得开发者可以快速地创建和启动微服务。例如,一个简单的用户认证微服务可以使用Spring Boot来快速搭建,并且可以通过Spring Cloud等相关技术来实现微服务之间的通信和协调。
相关文章:
框架学习01-Spring
一、Spring框架概述 Spring是一个开源的轻量级Java开发框架,它的主要目的是为了简化企业级应用程序的开发。它提供了一系列的功能,包括控制反转(IOC)、注入(DI)、面向切面编程(AOP)…...
Java | Leetcode Java题解之第539题最小时间差
题目: 题解: class Solution {public int findMinDifference(List<String> timePoints) {int n timePoints.size();if (n > 1440) {return 0;}Collections.sort(timePoints);int ans Integer.MAX_VALUE;int t0Minutes getMinutes(timePoint…...
126页PPT麦肯锡战略实施与成本优化:质效提升与精益采购实践
麦肯锡企业PMO的各个阶段是一个结构化和系统化的过程,旨在确保项目的高效执行和成功交付。以下是麦肯锡企业PMO各个阶段的详细描述: 一、项目启动与规划阶段 此阶段的主要目标是明确项目目标、业务需求,以及制定项目章程和项目管理计划。 …...
Modbus解析流程全面升级:体验全新核心与终极优化!
01 前言 本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,请搜索公众号: 智能家居NodeRed和HomeAssistant 即可关注。 02 全面改进的解析流程 前面发布过的Modbus解析流程在经过多个设备测试后发现存…...
【MWorks】Ubuntu 系统搭建
升级 Ubuntu系统 sudo apt-get update sudo apt-get upgrade安装流程 sudo chmod x 路径/文件.run安装 sudo 路径/文件.run安装过程中两个选项都填 y 打开安装对应的文件夹 运行 syslab.sh 文件,运行结束后,就可以在左上角开始搜索到syslab了。...
安装Element-Plus与v-model在vue3组件中的使用
安装Element-Plus 1.安装Element-Plus # 选择一个你喜欢的包管理器# NPM npm install element-plus --save# Yarn yarn add element-plus# pnpm pnpm install element-plus 2.main.ts中导入 import { createApp } from vue import { createPinia } from piniaimport App fr…...
Qt学习笔记第41到50讲
第41讲 UI美化遗留问题解决 如上图所示目前记事本的雏形已现,但是还是有待优化,比如右下角的拖动问题。 解决方法: ①首先修改了Widget类的构造函数。 Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) {ui->s…...
加固筑牢安全防线:多源威胁检测响应在企业网络安全运营中的核心作用
随着网络攻防技术的演进,传统威胁检测技术手段已难以适应快速变化的威胁。多维度协同的攻击手段使得单一的检测技术难以应对复杂的网络安全威胁,企业需要更先进的检测技术来提升安全防护能力。 一、传统威胁检测技术与单一检测的局限性 传统威胁检测技术…...
用Python将PDF表格提取到文本、CSV和Excel文件中
从PDF文档中提取表格并将其转换为更易于处理的格式(如文本、CSV和Excel文件),是数据分析和信息管理中的常见需求。此过程可显著简化表格数据的处理,使数据的操作、分析和与其他数据集的集成更加便捷。无论是财务报表、研究论文&am…...
AIGC在游戏设计中的应用及影响
文章目录 一、AIGC的基本概念与背景AIGC的主要应用领域AIGC技术背景 二、AIGC在游戏设计中的应用1. 自动化游戏地图与关卡设计示例:自动生成2D平台游戏关卡 2. 角色与物品生成示例:使用GAN生成虚拟角色 3. 游戏剧情与任务文本生成示例:基于GP…...
给初学者的 Jupyter Notebook 教程
目录 一、什么是Jupyter Notebook? 1. 简介 2. 组成部分 ① 网页应用 ② 文档 3. Jupyter Notebook的主要特点 二、安装Jupyter Notebook 0. 先试用,再决定 1. 安装 ① 安装前提 ② 使用Anaconda安装 ③ 使用pip命令安装 三、运行Jupyter No…...
搜维尔科技:Xsens和BoB助力生物力学教育
Xsens和BoB助力生物力学教育 搜维尔科技:Xsens和BoB助力生物力学教育...
Vue动态计算Table表格的高度
因为每个用户不同的电脑屏幕宽高度,造成了Table表格的高度不一致,因此想要动态计算出table的高度,让其能够正常的铺满整个屏幕 代码 完整代码如下:首先计算 窗口的高度 - 搜索框的高度 - 固定数值 mounted () {// 计算搜索框的高…...
【MongoDB】MongoDB的聚合(Aggregate、Map Reduce)与管道(Pipline) 及索引详解(附详细案例)
文章目录 MongoDB的聚合操作(Aggregate)MongoDB的管道(Pipline操作)MongoDB的聚合(Map Reduce)MongoDB的索引 更多相关内容可查看 MongoDB的聚合操作(Aggregate) 简单理解ÿ…...
数组和字符串的es6新方法使用和综合案例
文章目录 一、数组1.forEach() 对数组中的每个元素执行回调函数,无返回值。2.map() 通过对数组中的每个元素执行回调函数生成新的数组3.filter() 过滤返回一个符合条件的新数组4.find() 返回符合条件的第一个数组元素,如果不存在则返回undefined5.every(…...
JS语法进阶第一课!—DOM(重点)
1、DOM概念 DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model) 当网页被加载时,浏览器将网页转为一个DOM,并用JS进行各种操作。比如:改变页面中的HTML 元素及其属性&#x…...
Swift 开发教程系列 - 第5章:集合类型
Swift 提供了几种常用的集合类型,用于存储和管理一组数据。这些集合类型包括数组(Array)、字典(Dictionary)和集合(Set)。本章将介绍它们的使用方法及常见操作。 5.1 数组(Array&am…...
Spring:Bean(创建方式,抽象继承,工厂Bean,生命周期)
1,Bean的创建 1.1,调用构造器创建Bean 调用Bean类的无参构造函数来创造对象,因此要求提供无参构造函数。在这种情况下class元素是必须的,值就是Bean对象的实现类。 如果采用设值注入,Spring容器将使用默认的构造器来创…...
Flutter中的Extension关键字
目录 前言 一、什么是扩展(Extension) 二、扩展的语法 三、示例:为String 添加扩展方法 四、使用扩展的场景 五、复杂示例:为DateTime添加扩展 前言 在 Dart 和 Flutter 中,extension 关键字允许开发者为现有的类添加新的功能,而无需修改原有类的代…...
transformers 框架使用详解,bert-base-chinese
以 bert-base-chinese 模型为例,模型目录 model_name "C:/Users/Administrator.DESKTOP-TPJL4TC/.cache/modelscope/hub/tiansz/bert-base-chinese" bert-base-chinese 模型大小只有400多兆,参数的量级在百万级别,与现在动辄几十…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
FTXUI::Dom 模块
DOM 模块定义了分层的 FTXUI::Element 树,可用于构建复杂的终端界面,支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...
第14节 Node.js 全局对象
JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局…...
【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境
如何结合 Conda 任意创建和配置不同 Python 版本的双轨隔离的Poetry 虚拟环境? 在 Python 开发中,为不同项目配置独立且适配的虚拟环境至关重要。结合 Conda 和 Poetry 工具,能高效创建不同 Python 版本的 Poetry 虚拟环境,接下来…...
视觉slam--框架
视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图? 建图并没有一个固定的形式和算法…...
Angular中Webpack与ngx-build-plus 浅学
Webpack 在 Angular 中的概念 Webpack 是一个模块打包工具,用于将多个模块和资源打包成一个或多个文件。在 Angular 项目中,Webpack 负责将 TypeScript、HTML、CSS 等文件打包成浏览器可以理解的 JavaScript 文件。Angular CLI 默认使用 Webpack 进行项目…...
