Spring 框架及其主要模块

1. 什么是 Spring 框架?

Spring 是一个 轻量级、开源的 Java 应用程序框架,用于简化企业级应用程序的开发。它的主要目标是通过 控制反转(IoC)面向切面编程(AOP) 来解耦代码,使应用程序更具可维护性和扩展性。Spring 主要用于 依赖注入、事务管理、MVC 结构、数据访问、远程调用 等企业级应用开发。

Spring 作为一个完整的应用框架,可以与多种技术整合,如 Hibernate、MyBatis、Struts、JDBC,并支持 微服务架构,如 Spring Boot 和 Spring Cloud。


2. Spring 的七大核心模块

Spring 框架由多个模块组成,每个模块都有特定的功能,下面逐一讲解:

1. Core 模块(核心容器,IoC/DI)

核心功能:

  • 提供 依赖注入(Dependency Injection,DI),实现 控制反转(Inversion of Control,IoC)
  • Spring 容器会管理 Bean 的生命周期,并自动处理 Bean 之间的依赖关系。
  • 主要包括 BeanFactoryApplicationContext 等核心组件。

关键类和接口:

  • BeanFactory:最基本的 IoC 容器,延迟加载 Bean。
  • ApplicationContext:高级 IoC 容器,提供事件监听、国际化等功能。
  • XmlBeanFactory(已废弃):基于 XML 配置的 Bean 工厂。

示例:

<!-- 定义 Bean -->
<bean id="userService" class="com.example.UserService"><property name="userRepository" ref="userRepository"/>
</bean>
// 从容器中获取 Bean
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = context.getBean(UserService.class);

2. AOP 模块(面向切面编程)

核心功能:

  • AOP(Aspect-Oriented Programming) 允许开发者在不修改原代码的情况下,动态地增强代码(如日志记录、事务管理、权限控制)。
  • 通过 切面(Aspect)、通知(Advice)、切点(Pointcut)、连接点(JoinPoint) 实现方法级别的增强。

关键组件:

  • @Aspect:定义切面类。
  • @Pointcut:定义切入点(在哪些方法上生效)。
  • @Before@After@Around 等注解:定义不同类型的增强。

示例:

@Aspect
@Component
public class LoggingAspect {@Before("execution(* com.example.service.*.*(..))")public void beforeMethod(JoinPoint joinPoint) {System.out.println("方法调用前:" + joinPoint.getSignature().getName());}
}

3. ORM 模块(数据库访问支持)

核心功能:

  • Spring 提供对主流 ORM(对象关系映射)框架 的集成,如 Hibernate、MyBatis、JPA,简化数据库访问代码。

特点:

  • 统一事务管理
  • 通过 JdbcTemplate 统一管理数据库连接

示例(Spring + MyBatis):

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/>
</bean>
@Repository
public class UserRepository {@Autowiredprivate SqlSessionFactory sqlSessionFactory;public User getUserById(int id) {SqlSession session = sqlSessionFactory.openSession();return session.selectOne("getUserById", id);}
}

4. DAO 模块(数据访问层,JDBC 封装)

核心功能:

  • JdbcTemplate:封装 JDBC 操作,减少 样板代码(如连接、关闭数据库)。
  • 事务管理:提供 声明式事务管理(@Transactional),避免手动管理事务。

示例:

@Service
public class UserService {@Autowiredprivate JdbcTemplate jdbcTemplate;public void addUser(String name) {String sql = "INSERT INTO users (name) VALUES (?)";jdbcTemplate.update(sql, name);}
}

5. Web 模块(Web 开发支持)

核心功能:

  • 提供 Spring Web 相关功能,如 Servlet 监听器、Web 应用上下文、文件上传等。
  • 支持 Spring MVC,也可以整合 Struts、JSF、GWT 等框架。

示例(Spring MVC 控制器):

@Controller
@RequestMapping("/user")
public class UserController {@GetMapping("/{id}")public String getUser(@PathVariable int id, Model model) {model.addAttribute("user", new User(id, "张三"));return "userDetail";}
}

6. Context 模块(应用上下文)

核心功能:

  • 扩展 IoC 容器,提供 事件传播、国际化、资源访问 等功能。
  • 允许外部程序访问 Spring 管理的 Bean。

示例(加载上下文):

ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = context.getBean(UserService.class);

7. MVC 模块(Spring MVC)

核心功能:

  • Spring MVC 是一个 轻量级的 Web 框架,基于 Servlet 提供 请求处理、参数绑定、视图解析
  • 遵循 前端控制器模式(DispatcherServlet),所有请求先经过 DispatcherServlet 处理。

主要组件:

  • DispatcherServlet(前端控制器)
  • Controller(控制器)
  • ViewResolver(视图解析器)
  • ModelAndView(模型视图)

示例(Spring MVC 控制器):

@RestController
@RequestMapping("/api")
public class UserController {@GetMapping("/users/{id}")public User getUser(@PathVariable int id) {return new User(id, "张三");}
}

总结

模块作用
CoreIoC/DI(控制反转),管理 Bean 的生命周期
AOP面向切面编程(事务、日志等)
ORM兼容 Hibernate、MyBatis、JPA 等 ORM 框架
DAOJdbcTemplate,封装 JDBC 操作
Web提供 Web 支持,整合 Struts2、Servlet
Context提供 Bean 访问、事件传播、国际化支持
MVC轻量级 MVC 框架,支持 REST API

Spring 作为 Java 生态中的核心框架,提供了强大的 企业级应用支持,包括 数据库访问、Web 开发、事务管理,也是 Spring Boot 和 Spring Cloud 的基础。

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

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

相关文章

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案

目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行&#xff08;下载&#xff09; 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…

【DeepSeek论文精读】2. DeepSeek LLM:以长期主义扩展开源语言模型

欢迎关注[【youcans的AGI学习笔记】](https://blog.csdn.net/youcans/category_12244543.html&#xff09;原创作品 【DeepSeek论文精读】1. 从 DeepSeek LLM 到 DeepSeek R1 【DeepSeek论文精读】2. DeepSeek LLM&#xff1a;以长期主义扩展开源语言模型 【DeepSeek论文精读】…

力扣.623. 在二叉树中增加一行(链式结构的插入操作)

Problem: 623. 在二叉树中增加一行 文章目录 题目描述思路复杂度Code 题目描述 思路 1.首先要说明&#xff0c;对于数据结构无非两大类结构&#xff1a;顺序结构、链式结构&#xff0c;而二叉树实质上就可以等效看作为一个二叉链表&#xff0c;而对于链表插入一个节点的操作是应…

深度学习01 神经网络

深度学习是机器学习领域中的一个新的研究方向。所以在学习深度学习之前我们需要了解一下神经网络。 神经网络 神经网络:是由大量的节点&#xff08;或称“神经元”&#xff09;和之间相互的联接构成。 每个节点代表一种特定的输出函数&#xff0c;称为激励函数、激活函数&…

基于JUnit4和JUnit5配合例子讲解JUnit的两种运行方式

1 引言 最近读的书有老有新&#xff0c;在读的过程中都完全完成了相应例子的构建和运行。在读《Spring in Action》1第4版时&#xff0c;其第37页的例子&#xff08;以下称例子1&#xff09;基于JUnit 4&#xff0c;并需要spring-test.jar&#xff1b;而在读《JUnit in Action…

【提示词工程】探索大语言模型的参数设置:优化提示词交互的技巧

在与大语言模型(Large Language Model, LLM)进行交互时,提示词的设计和参数设置直接影响生成内容的质量和效果。无论是通过 API 调用还是直接使用模型,掌握模型的参数配置方法都至关重要。本文将为您详细解析常见的参数设置及其应用场景,帮助您更高效地利用大语言模型。 …

使用Python创建、读取和修改Word文档

自动化文档处理是提升工作效率的关键路径之一&#xff0c;而Python凭借其简洁语法和丰富的生态工具链&#xff0c;是实现文档自动化处理的理想工具。通过编程手段批量生成结构规范的合同模板、动态注入数据分析结果生成可视化报告&#xff0c;或是快速提取海量文档中的关键信息…

Android Studio 2024.2.2.13版本安装配置详细教程

Android Studio 是由 Google 官方开发和维护的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为 Android 应用开发设计。它是基于 JetBrains 的 IntelliJ IDEA 平台构建的&#xff0c;集成了丰富的工具和功能&#xff0c;帮助开发者高效构建、调试、测试和发布 Androi…

Qt实现简易音乐播放器

使用Qt6实现简易音乐播放器&#xff0c;效果如下&#xff1a; github&#xff1a; Gabriel-gxb/MusicPlayer: qt6实现简易音乐播放器 一、整体架构 基于Qt框架构建 整个音乐播放器程序以Qt框架为基础进行开发。Qt提供了丰富的类库和工具&#xff0c;方便开发者构建图形用户界…

GPT-4使用次数有上限吗?一文了解使用规则

GPT-4的推出&#xff0c;让越来越多的用户开始体验其卓越的功能。无论是用于日常需求还是专业内容制作&#xff0c;GPT-4的应用范围广泛&#xff0c;获得了用户的广泛赞誉。但是&#xff0c;在具体使用过程中&#xff0c;不少用户发现自己似乎触碰到了GPT-4的使用上限&#xff…

水波效果

水波效果指在计算机图形学中模拟水面波纹的视觉效果&#xff0c;通常用于游戏、动画或者其他虚拟场景中。主要用于体现水体的动态感&#xff0c;比如水的波动、反射、折射、透明等&#xff0c;可以让人感觉像真实的水一样流动闪耀。 核心特点就是&#xff1a; 动态波纹光学特…

Redis | 十大数据类型

文章目录 十大数据类型概述key操作命令数据类型命令及落地运用redis字符串&#xff08;String&#xff09;redis列表&#xff08;List&#xff09;redis哈希表&#xff08;Hash&#xff09;redis集合&#xff08;Set&#xff09;redis有序集合&#xff08;ZSet / SortedSet&…

Linux之安装docker

一、检查版本和内核是否合格 Docker支持64位版本的CentOS 7和CentOS 8及更高版本&#xff0c;它要求Linux内核版本不低于3.10。 检查版本 cat /etc/redhat-release检查内核 uname -r二、Docker的安装 1、自动安装 Docker官方和国内daocloud都提供了一键安装的脚本&#x…

【WebLogic】Oracle发布WebLogic 14c最新版本-14.1.2.0

根据Oracle官方产品经理的博客&#xff0c;Oracle于2024年12月20日正式对外发布了WebLogic 14c的第二个正式版本&#xff0c;版本号为 14.1.2.0.0 &#xff0c;目前官方已开放客户端下载。该版本除继续支持 Jakarta EE 8 版本外&#xff0c;还增加了对 Java SE 17&#xff08;J…

feign 远程调用详解

在平常的开发工作中&#xff0c;我们经常需要跟其他系统交互&#xff0c;比如调用用户系统的用户信息接口、调用支付系统的支付接口等。那么&#xff0c;我们应该通过什么方式进行系统之间的交互呢&#xff1f;今天&#xff0c;简单来总结下 feign 的用法。 1&#xff1a;引入依…

解决 npm : 无法加载文件 D:\nodeJS\node_global\npm.ps1,因为在此系统上禁止运行脚本。

问题 在我将nodeJS从18更新到22之后&#xff0c;我发现在黑窗口运行npm run dev&#xff0c;可以成功启动项目&#xff0c;但是在Cursor的终端中却报如下错误&#xff1a; PS D:\DESKTOP\项目\vue-ems-admain> npm run dev npm : 无法加载文件 D:\Users\Download\nodeJS\no…

快速对QWen2.5大模型进行微调

先看看训练结果&#xff1a; 目录 前言什么是LLaMA-Factory&#xff1f;安装LLaMA-Factory准备数据集配置微调参数运行微调脚本评估和保存模型使用微调后的模型可视化微调大模型总结 前言 在当今人工智能领域&#xff0c;大模型&#xff08;如LLaMA、GPT等&#xff09;的微调…

深入理解linux中的文件(下)

目录 一、语言级缓冲区和内核级缓冲区 二、C语音中的FILE* fp fopen(“./file.txt”,"w"): 四、理解磁盘结构&#xff1a; 物理结构 逻辑结构 五、未被打开的文件&#xff1a; 六、更加深入理解inode编号怎么找到文件&#xff1a; 七、对路径结构进行…

自动化测试、压力测试、持续集成

因为项目的原因&#xff0c;前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api。下面将研究的成果展示给大家&#xff0c;希望对需要的人有所帮助。 SoapUI 是什么&#xff1f; SoapUI 是一个开源测试工具&#xff0c;通过 soap/http 来检查、调用、实现 Web Service 的…

BUU28 [GXYCTF2019]BabySQli1

常规万能密码&#xff0c;发现登不上去 过滤掉了or&#xff0c;&#xff0c;当尝试了n种方法以后&#xff0c;最关键的是发现()居然也被过滤了 哈哈&#xff0c;那玩个淡&#xff0c; 再搜wp&#xff01;&#xff01; 当输入admin的时候&#xff0c;提示密码错误&#xff0…