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

spring01-简介

一、什么是 Spring?

Spring 是一个开源的 Java 企业级开发框架,它帮助开发者快速、高效、整洁地构建 Web 应用、微服务和后端系统。

它的核心思想是:

“解耦合” + “高效开发” + “灵活扩展”

Spring 就像是 Java 后端开发的骨架系统,帮你搭好“地基+水电+框架”,你只需要专注写业务逻辑。

二、spring提供了什么?

Spring 本身非常庞大,但核心模块主要包括: 

模块名作用
Spring Core提供 IOC 容器(控制反转)
Spring AOP面向切面编程(如日志、权限等)
Spring MVC构建 Web 应用的框架
Spring Boot简化配置,快速启动 Spring 项目
Spring Data快速操作数据库
Spring Security提供权限和认证管理
Spring Cloud构建分布式系统、微服务架构

三、Spring 的两个核心部分:IOC 和 AOP

3-1、IOC(控制反转,Inversion of Control)

  • 传统方式下,对象由程序员使用 new 手动创建和管理。

  • 在 Spring 中,对象的创建、依赖关系由 Spring 容器统一管理

把对象的控制权“反转”给 Spring,你只需要声明依赖,Spring 帮你注入

例子:

@Autowired
UserService userService; // Spring 自动创建并注入

3-2、AOP(面向切面编程,Aspect Oriented Programming)

  • 把通用功能(如日志、事务、安全等)从核心业务逻辑中抽离出来。

  • 不修改源代码,也能“增强”原有功能,类似于“给代码加外挂”。

横向切入功能,模块之间解耦,比如:方法执行前,自动打印日志、执行后,自动记录性能。

例子:

@Before("execution(* com.example.service.*.*(..))")
public void logBefore(JoinPoint joinPoint) {System.out.println("调用方法前日志记录:" + joinPoint.getSignature().getName());
}

四、Spring 的主要特点

(1)方便解耦,简化开发

  • 通过 IOC 管理对象,组件之间只需声明依赖,不再直接 new 对象。

  • 降低模块间耦合度,提高系统可维护性和扩展性。

(2)AOP 编程支持

  • 可以轻松实现日志、权限校验、事务控制等通用功能的集中管理。

  • 不需修改业务类代码,维护更方便。

(3)方便程序测试

  • 通过依赖注入(DI),可以轻松替换实际对象为 Mock 对象,便于单元测试。

(4)方便和其他框架整合

  • Spring 可以和 JDBC、Hibernate、MyBatis、Struts、Quartz 等多种第三方框架无缝集成。

  • 提供大量预置配置,节省集成时间。

(5)方便进行事务操作

  • 提供声明式事务管理(基于注解或配置)。

  • 只需一个注解 @Transactional 即可完成事务控制。

例子:

@Transactional
public void transfer(Account from, Account to, double amount) {// 转账逻辑
}

(6)降低 API 开发难度

  • Spring Boot + Spring MVC 提供简洁易用的 REST API 构建方式。

  • 使用注解快速开发、简化配置、减少样板代码。

例子:

@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello Spring!";}
}

总结

内容
核心机制IOC 控制对象创建,AOP 实现功能增强
核心优势解耦、简化开发、统一事务管理、易集成

五、spring 6 VS spring 5

spring 5.xspring 6.x
JDK版本>= 1.8>= 17
Tomcat版本9.x10.x
Annotation包javax.annotationjakarta.annotation
Servlet包javax.servletjakarta.servlet
JMS包javax.jmsjakarta.jms
JavaMail包javax.mailjakarta.mail
http://www.lryc.cn/news/574481.html

相关文章:

  • 618风控战升级,瑞数信息“动态安全+AI”利剑出鞘
  • window显示驱动开发—DirectX 图形基础结构 DDI
  • 【CS创世SD NAND征文】基于全志V3S与CS创世SD NAND的物联网智能路灯网关数据存储方案
  • taro小程序,tailwindcss的bg-x-x,背景颜色不生效,只有自定义的写法颜色才生效
  • C++修炼:异常
  • 解码成都芯谷金融中心文化科技产业园:文化+科技双轮驱动
  • Qt 中使用 gtest 做单元测试
  • 一文读懂微观测量:光学3D轮廓仪与共聚焦显微成像的结合应用
  • cherry-pick除了使用命令,有没有什么工具可以使用,或者更高效的方法
  • Linux 文件 I/O 与标准 I/O 缓冲机制详解
  • Java面试中被深挖过的线程问题
  • 对手机屏中断路和短路的单元进行切割或熔接,实现液晶线路激光修复原理
  • Luckysheet Excel xlsx 导入导出互相转换
  • 02-Linux内核源码编译
  • CentOS 7 编译安装Nginx 1.27.5完整指南及负载均衡配置
  • MinIO中视频转换为HLS协议并进行AES加密
  • Python Polars库详解:高性能数据处理的新标杆
  • pyqt多界面
  • LangChain网页自动化PlayWrightBrowserToolkit
  • gRPC 静态库链接到 DLL 的风险与潜在问题
  • 鸿蒙开发深入解析:Service Ability(后台任务)全面指南
  • 深度解析|智能汽车操作系统技术突破:从架构演进到产业重构
  • 比翼双飞,影像的迁徙之旅
  • 基于目标驱动的分布式敏捷开发
  • GPPT(Graph Pre-training and Prompt Tuning)项目复现
  • 生成FUCK代币,并用程序进行转账的过程
  • C++字符串的行输入
  • 查询sqlserver数据库中,数据占的空间和索引占的空间
  • 鸿蒙HarmonyOS 5 开发实践:LazyForEach在通讯录应用中的高效渲染(附:代码)
  • 前端vue2每三十秒被动接受后端服务器发送过来得数据