Spring概述与核心概念学习 -- Spring入门(一)

发布时间:2026/10/27 8:22:37

Spring概述与核心概念学习 -- Spring入门(一) 文章目录*前言* 发现宝藏* 一、Spring是什么* * 1.概述 * 2.了解spring家族 * 3.spring系统概述 * 4.spring优点 * 5.spring学习路线* 二、入门spring* * 1.核心概念 * 2.IOC入门案例 * 3.DI入门案例 * 4.bean的配置 * 5.IOC容器相关* 三、数据源对象管理* * 1. 数据源对象管理入门案例 * 2. 加载properties配置文件* 总结* *前言–为了巩固所学的知识作者尝试着开始发布一些学习笔记类的博客方便日后回顾。当然如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚文章中如果有记录错误欢迎读者朋友们批评指正。 博客的参考源码以及可以在我主页的资源里找到如果在学习的过程中有什么疑问欢迎大家在评论区向我提出*发现宝藏----前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。【宝藏入口】。一、Spring是什么------------### 1.概述Spring Framework 是一个功能强大的 Java 应用程序框架旨在提供高效且可扩展的开发环境。* 它结合了轻量级的容器IOC和依赖注入(DI)功能提供了一种使用 POJO 进行容器配置和面向切面的编程的简单方法以及一组用于AOP(切面编程)的模块。* Spring 框架还支持各种移动应用开发技术如 Android 和 iOS。此外它还提供了对事务管理、对象/关系映射、JavaBeans、JDBC、JMS 和其他技术的支持从而确保高效开发。### 2.了解spring家族### 3.spring系统概述Spring 有可能成为所有企业应用程序的一站式服务点然而Spring 是模块化的允许你挑选和选择适用于你的模块不必要把剩余部分也引入。下面的部分对在 Spring 框架中所有可用的模块给出了详细的介绍。Spring 框架提供约 20 个模块可以根据应用程序的要求来使用。1. 核心容器(Core Container)核心容器由 spring-corespring-beansspring-contextspring-context-support和spring-expressionSpELSpring 表达式语言Spring Expression Language等模块组成它们的细节如下 spring-core 模块提供了框架的基本组成部分包括 IoC 和依赖注入功能。 spring-beans 模块提供 BeanFactory工厂模式的微妙实现它移除了编码式单例的需要并且可以把配置和依赖从实际编码逻辑中解耦。 context 模块建立在由 core和 beans 模块的基础上建立起来的它以一种类似于 JNDI 注册的方式访问对象。Context 模块继承自 Bean 模块并且添加了国际化比如使用资源束、事件传播、资源加载和透明地创建上下文比如通过 Servelet 容器等功能。Context 模块也支持 Java EE 的功能比如 EJB、JMX 和远程调用等。ApplicationContext 接口是 Context 模块的焦点。spring-context-support 提供了对第三方集成到 Spring 上下文的支持比如缓存EhCache, Guava, JCache、邮件JavaMail、调度CommonJ, Quartz、模板引擎FreeMarker, JasperReports, Velocity等。 spring-expression 模块提供了强大的表达式语言用于在运行时查询和操作对象图。它是 JSP2.1 规范中定义的统一表达式语言的扩展支持 set 和 get 属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从 Spring IoC 容器检索对象还支持列表的投影、选择以及聚合等。 2. 数据访问/集成(Data Access/Integration) 数据访问/集成层包括 JDBCORMOXMJMS 和事务处理模块它们的细节如下注JDBCJava Data Base ConnectivityORMObject Relational MappingOXMObject XML MappingJMSJava Message Service JDBC 模块提供了 JDBC 抽象层它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。 ORM 模块提供了对流行的对象关系映射 API 的集成包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 spring的其它功能整合比如前面提及的事务管理。 OXM 模块提供了对 OXM 实现的支持比如 JAXB、Castor、XML Beans、JiBX、XStream 等。 JMS 模块包含生产produce和消费consume消息的功能。从 Spring 4.1 开始集成了 spring-messaging 模块。 事务模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。注编程式事务需要自己写 beginTransaction()、commit()、rollback() 等事务管理方法声明式事务是通过注解或配置由 spring 自动处理编程式事务粒度更细 3.WebWeb 层由 WebWeb-MVCWeb-Socket 和 Web-Portlet 组成它们的细节如下 Web 模块提供面向 web 的基本功能和面向 web 的应用上下文比如多部分multipart文件上传功能、使用 Servlet 监听器初始化 IoC 容器等。它还包括 HTTP 客户端以及 Spring 远程调用中与 web 相关的部分。 Web-MVC 模块为 web 应用提供了模型视图控制MVC和 REST Web服务的实现。Spring 的 MVC 框架可以使领域模型代码和 web 表单完全地分离且可以与 Spring 框架的其它所有功能进行集成。 Web-Socket 模块为 WebSocket-based 提供了支持而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。 Web-Portlet 模块提供了用于 Portlet 环境的 MVC 实现并反映了 spring-webmvc 模块的功能。 4.Test模块Test 模块Spring 支持 Junit 和 TestNG 测试框架而且还额外提供了一些基于 Spring 的测试功能比如在测试 Web 框架时模拟 Http 请求的功能。5. 其他还有其他一些重要的模块像 AOPAspectsInstrumentationWeb 和测试模块它们的细节如下 AOP 模块提供了面向方面切面的编程实现允许你定义方法拦截器和切入点对代码进行干净地解耦从而使实现功能的代码彻底的解耦出来。使用源码级的元数据可以用类似于.Net属性的方式合并行为信息到代码中。 Aspects 模块提供了与 AspectJ 的集成这是一个功能强大且成熟的面向切面编程AOP框架。 Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。 Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。 测试模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试 ### 4.spring优点* 方便解耦简化开发Spring 就是一个大工厂可以将所有对象的创建和依赖关系的维护交给 Spring 管理* 方便集成各种优秀框架Spring 不排斥各种优秀的开源框架其内部提供了对各种优秀框架如 Struts2、Hibernate、MyBatis 等的直接支持* 降低 Java EE API 的使用难度Spring 对 Java EE 开发中非常难用的一些 APIJDBC、JavaMail、远程调用等都提供了封装使这些 API 应用的难度大大降低* 方便程序的测试Spring 支持 JUnit4可以通过注解方便地测试 Spring 程序* AOP 编程的支持Spring 提供面向切面编程可以方便地实现对程序进行权限拦截和运行监控等功能* 声明式事务的支持只需要通过配置就可以完成对事务的管理而无须手动编程。### 5.spring学习路线二、入门spring----------### 1.核心概念1. 依赖注入DI* Spring 最认同的技术是控制反转的依赖注入DI模式。控制反转IoC是一个通用的概念它可以用许多不同的方式去表达依赖注入仅仅是控制反转的一个具体的例子。 * 当编写一个复杂的 Java 应用程序时应用程序类应该尽可能的独立于其他的 Java 类来增加这些类可重用可能性当进行单元测试时可以使它们独立于其他类进行测试。依赖注入或者有时被称为配线有助于将这些类粘合在一起并且在同一时间让它们保持独立。 * 到底什么是依赖注入让我们将这两个词分开来看一看。这里将依赖关系部分转化为两个类之间的关联。例如类 A 依赖于类 B。现在让我们看一看第二部分注入。所有这一切都意味着类 B 将通过 IoC 被注入到类 A 中。 * 依赖注入可以以向构造函数传递参数的方式发生或者通过使用 setter 方法 post-construction。由于依赖注入是 Spring 框架的核心部分所以我将在一个单独的章节中利用很好的例子去解释这一概念。 2.面向切面的程序设计AOP* Spring 框架的一个关键组件是面向切面的程序设计AOP框架。一个程序中跨越多个点的功能被称为横切关注点这些横切关注点在概念上独立于应用程序的业务逻辑。有各种各样常见的很好的关于方面的例子比如日志记录、声明性事务、安全性和缓存等等。 * 在 OOP 中模块化的关键单元是类而在 AOP 中模块化的关键单元是方面。AOP 帮助你将横切关注点从它们所影响的对象中分离出来然而依赖注入帮助你将你的应用程序对象从彼此中分离出来。 * Spring 框架的 AOP 模块提供了面向方面的程序设计实现可以定义诸如方法拦截器和切入点等从而使实现功能的代码彻底的解耦出来。使用源码级的元数据可以用类似于 .Net 属性的方式合并行为信息到代码中。我将在一个独立的章节中讨论更多关于 Spring AOP 的概念。 3. SpringIoC 容器* Spring 容器是 Spring 框架的核心。容器将创建对象把它们连接在一起配置它们并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入DI来管理组成一个应用程序的组件。这些对象被称为 Spring Beans * 通过阅读配置元数据提供的指令容器知道对哪些对象进行实例化配置和组装。配置元数据可以通过 XMLJava 注释或 Java 代码来表示。下图是 Spring 如何工作的高级视图。 Spring IoC 容器利用 Java 的 POJO 类和配置元数据来生成完全配置和可执行的系统或应用程序* IOC 容器具有依赖注入功能的容器它可以创建对象IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例控制权由程序员控制而控制反转是指new实例工作不由程序员来做而是交给Spring容器来做。在Spring中BeanFactory是IOC容器的实际代表者。 * Spring 提供了以下两种不同类型的容器。 序号容器 描述1Spring BeanFactory 容器它是最简单的容器给 DI 提供了基本的支持它用 org.springframework.beans.factory.BeanFactory 接口来定义。BeanFactory 或者相关的接口如 BeanFactoryAwareInitializingBeanDisposableBean在 Spring 中仍然存在具有大量的与 Spring 整合的第三方框架的反向兼容性的目的。2Spring ApplicationContext 容器该容器添加了更多的企业特定的功能例如从一个属性文件中解析文本信息的能力发布应用程序事件给感兴趣的事件监听器的能力。该容器是由 org.springframework.context.ApplicationContext 接口定义。ApplicationContext 容器包括 BeanFactory 容器的所有功能所以通常不建议使用BeanFactory。BeanFactory 仍然可以用于轻量级的应用程序如移动设备或基于 applet 的应用程序其中它的数据量和速度是显著。4. SpringBean定义* 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。bean 是一个被实例化组装并通过 Spring IoC 容器所管理的对象。这些 bean 是由用容器提供的配置元数据创建的例如已经在先前章节看到的在 XML 的表单中的 定义。 * bean 定义包含称为配置元数据的信息下述容器也需要知道配置元数据 * 如何创建一个 bean * bean 的生命周期的详细信息 * bean 的依赖关系 上述所有的配置元数据转换成一组构成每个 bean 定义的下列属性。属性描述class这个属性是强制性的并且指定用来创建 bean 的 bean 类。name这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中你可以使用 ID 和/或 name 属性来指定 bean 标识符。scope这个属性指定由特定的 bean 定义创建的对象的作用域它将会在 bean 作用域的章节中进行讨论。constructor-arg它是用来注入依赖关系的并会在接下来的章节中进行讨论。properties它是用来注入依赖关系的并会在接下来的章节中进行讨论。autowiring mode它是用来注入依赖关系的并会在接下来的章节中进行讨论。lazy-initialization mode延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时而不是在启动时去创建一个 bean 实例。initialization 方法在 bean 的所有必需的属性被容器设置之后调用回调方法。它将会在 bean 的生命周期章节中进行讨论。destruction 方法当包含该 bean 的容器被销毁时使用回调方法。它将会在 bean 的生命周期章节中进行讨论。* Bean 与 Spring 容器的关系## 5.spring三层架构 A 表现层 web层 MVC是表现层的一个设计模型 B 业务层 service层 C 持久层 dao层 ### 2.IOC入门案例1. 入门案例思路分析2. 创建maven模块3. 编写接口和Dao实现类(此时无spring环境纯JAVA开发)* 模块代码结构* BookDao public interface BookDao { public void save(); } * BookDaoImpl public class BookDaoImpl implements BookDao { public void save() { System.out.println(“book dao save …”); } } * BookService public interface BookService { public void save(); } * BookServiceImpl public class BookServiceImpl implements BookService { private BookDao bookDao new BookDaoImpl(); public void save() { System.out.println(“book service save …”); bookDao.save(); } } * Main public class Main { public static void main(String[] args) { BookService bookService new BookServiceImpl(); bookService.save(); } } * Main类运行结果4. 示例代码解析* 首先写了两个数据层接口 BookDao 和 BookService两个接口中都定义了save()方法* 然后写了两个数据层接口的实现类 BookDaoImpl 和 BookServiceImpl分别实现了save() 方法方法里都要一条输出语句但是两个实现类save方法打印的内容不同* 其中 BookServiceImpl 类中还通过new创建对象的方式调用了 BookDaoImpl的save方法* 最后在Main类中通过new创建对象的方式调用了BookServiceImpl的save方法将两个save()方法中的语句打印了出来5. 在pom.xml中导入spring坐标spring-context org.springframework spring-context 5.2.21.RELEASE 6. 创建spring核心配置文件applicationContext.xmlresources 目录右键 -- new -- XML Configuration File -- Spring Config导入spring坐标后才有对应选项7. 配置Bean(如下) ?xml version1.0 encodingUTF-8? 8. 在org.example下新建一个类Main2 public class Main2 { public static void main(String[] args) { //3.获取IoC容器 ApplicationContext ctx new ClassPathXmlApplicationContext(“applicationContext.xml”); //4.获取bean根据bean配置id获取 //左边是对象右边是接口所以要强转类型 BookDao bookDao (BookDao) ctx.getBean(“bookDao”); bookDao.save(); BookService bookService (BookService) ctx.getBean(“bookService”); bookService.save(); } } * 程序运行结果通过spring创建对象而不是通过new创建对象9. 总结 spring程序的开发步骤### 3.DI入门案例1. 删除BookServiceImpl类中通过new方式创建对象的代码并提供对应的setter方法 package org.example.service.impl; import org.example.dao.BookDao; import org.example.service.BookService; public class BookServiceImpl implements BookService { //5.删除业务层中使用new的方式创建的dao对象 private BookDao bookDao; // private BookDao bookDao new BookDaoImpl(); public void save() { System.out.println(“book service save …”); bookDao.save(); } // 6.提供对应的set方法 public void setBookDao(BookDao bookDao) { this.bookDao bookDao; } } 2. 在全局配置文件applicationContext.xml文件中将BookDao注入到BookService中 ?xml version1.0 encodingUTF-8? 3. 运行结果4. 注意事项name 的值是类的属性值ref的值是id值### 4.bean的配置1. bean的基础配置3. bean的别名设置3. 控制bean的作用范围### 5.IOC容器相关1. 创建容器2. 获取bean的方式3. 容器类层次结构BeanFactory接口创建完毕后所有的bean均为延迟加载三、数据源对象管理---------### 1. 数据源对象管理入门案例1. 导入数据源坐标以druid数据源为例com.alibaba druid 1.1.162. 在核心配置文件中配置管理数据源对象由于第三方技术已经写好注入方式以及具体属性名需要查3. 创建编写模拟配置类App及其运行结果public class App { public static void main(String[] args) { ApplicationContext ctx new ClassPathXmlApplicationContext(“applicationContext.xml”); DataSource dataSource (DataSource) ctx.getBean(“dataSource”); System.out.println(dataSource); } }### 2. 加载properties配置文件1. 在resources目录下创建jdbc.properties文件jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://127.0.0.1:3306/spring_db jdbc.usernameroot jdbc.passwordroot2. 在核心配置类中开启context命名空间3. 使用context空间加载properties文件?xml version1.0 encodingUTF-8? context:property-placeholder location“jdbc.properties” system-properties-mode“NEVER”/4. 将绑定好的properties属性注入到bookdao中通过bookdao中的save方法输出public interface BookDao { public void save(); } public class BookDaoImpl implements BookDao { private String name; public void setName(String name) { this.name name; } public void save() { System.out.println(“book dao save …” name); } }5. 模拟测试类及输出结果6. 小结和拓展总结–欢迎各位留言交流以及批评指正如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞收藏支持一下。 博客的参考源码可以在我主页的资源里找到如果在学习的过程中有什么疑问欢迎大家在评论区向我提出
延伸阅读

更多相关文章

2026/10/27 8:22:10

美团前端移动端岗笔试复盘:从性能优化到场景题全解析

2026年春招,我投的是美团前端&移动端岗,收到第二批笔试通知的时候说实话有点意外。之前看第一批的面经,感觉整体偏“基础扎实”型,没想到第二批的题目直接把我从“背八股”的思路里拽了出来,选择题里出现了移动端性…

2026/10/27 8:21:53

Nginx 入门,一篇搞定!

文章目录* 一、简介* 二、下载和安装* * 1、下载 与 各版本介绍 * 2、安装流程* 三、目录结构分析* 四、配置环境变量* 五、安装 tree 工具 (可选)* 六、查看版本号* 七、检查配置文件完整性* 八、启动和停止* 九、Nginx 的一些细节* * 1、自动创建临时目…

2026/10/25 9:22:40

微信小程序云开发实战:从零构建全栈失物招领应用

简介:云开发是一种集成了数据库、存储和云函数等后端能力的Serverless解决方案,它让开发者无需管理服务器即可构建全栈应用。其核心原理是通过提供封装好的云端服务,将复杂的后端运维工作简化,使开发者能专注于业务逻辑。这项技术…

2026/10/27 8:18:41

轻量级多模态AI:llama.cpp部署Qwen3.5-0.8B实践

1. 项目概述:当轻量级大模型遇上多模态最近在折腾一个有意思的实验——用llama.cpp加载Qwen3.5-0.8B的BF16量化版多模态模型,实现图像文字识别功能。这个方案特别适合想在本机跑多模态AI的开发者,相比动辄需要16G显存的方案,经过优…

2026/10/27 8:18:41

基于深度学习的智能花卉识别系统设计与优化

1. 项目背景与核心价值花卉识别一直是计算机视觉领域的经典应用场景。去年我在完成本科毕业设计时,选择了基于深度学习的花卉识别系统作为课题,一方面因为这个方向有明确的应用场景(如智能园艺、植物学研究辅助),另一方…

2026/10/27 8:18:41

Delphi DBExpress连接MySQL 5.7的DLL版本匹配与部署指南

简介:本资源是面向Delphi 7开发者连接MySQL 5.7数据库的实操型动态库解决方案,专为解决DBExpress组件在旧版Delphi中兼容高版本MySQL时常见的驱动缺失、连接失败等典型问题而设计。压缩包内含17个文件,总计1.3MB,核心包括经项目实…

2026/10/27 8:18:41

火山方舟与Claude Code集成配置实战指南

1. 项目概述火山方舟Coding Plan(豆包)是当前AI开发领域的热门工具链,而Claude Code作为新一代智能编程助手,二者的结合能够显著提升开发效率。最近在帮团队配置这套环境时,我发现官方文档对某些关键环节的说明比较简略…

2026/10/27 8:18:41

Mac上5分钟配置VSCode C++开发环境(Clang+Homebrew)

1. 项目概述&#xff1a;为什么一个“5分钟C环境配置”值得专门写一篇长文&#xff1f; 你是不是也经历过——刚装好VSCode&#xff0c;点开一个 .cpp 文件&#xff0c;敲下 #include <iostream> &#xff0c;按下F5想跑个Hello World&#xff0c;结果弹出一连串红色…

2026/10/27 8:13:40

技术人必备PPT美化工具与高效制作技巧

1. 技术人为何需要PPT美化工具&#xff1f;作为常年与代码打交道的技术从业者&#xff0c;PPT制作往往是我们最头疼的软技能之一。上周我参加技术分享会时&#xff0c;看到某位架构师的PPT满屏都是密密麻麻的代码截图和黑白文字&#xff0c;台下观众昏昏欲睡的场景至今难忘。这…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介&#xff1a;这份PDF是全国计算机二级C语言考试的试题与答案解析&#xff0c;专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介&#xff1a;一份以实战为导向的Python爬虫入门资源&#xff0c;面向具备基本编程基础、希望快速掌握网络数据抓取的初学者&#xff0c;可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档&#xff0c;完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介&#xff1a;这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档&#xff0c;压缩包大小七十八KB&#xff0c;内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开&#xff1a;先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中&#xff0c;设计模式、架构模式、并发模式乃至团队协作模式的选择&#xff0c;往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景&#xff0c;剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天&#xff0c;新手面对最多的困惑往往不是"工具够不够强"&#xff0c;而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径&#xff1a;先从 Ask&#xff08;问答式交互&#xff09;起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑