框架学习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多兆,参数的量级在百万级别,与现在动辄几十…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
