发布时间:2026/8/28 17:44:38
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/8/28 17:44:38

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

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

2026/8/28 17:44:38

Nginx 入门,一篇搞定!

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

2026/8/28 17:39:37

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

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

2026/8/28 18:29:53

【AI大模型进阶】用 Gradio 三行代码搭建一个漂亮的 Web UI 界面

【AI大模型进阶】用 Gradio 三行代码搭建一个漂亮的 Web UI 界面 这是【AI大模型进阶】系列第一百零四课,聚焦AI应用可视化落地,解决所有AI开发者的通用痛点:代码能跑、功能可用,但没有界面、无法交付。 在前几节课程中,我们先后完成了RAG知识库系统、法律问答机器人、企…

2026/8/28 18:29:53

00-Dubbo-原生API开发应用

1、前言 在企业级的应用开发的时候,一般都是基于springboot、springcloud框架上使用dubbo,但是Dubbo作为一款RPC框架,Dubbo定义了一套完善的API接口,我们也是可以基于原生API开发Dubbo应用,纯API可以实现的业务场景包…

2026/8/28 18:29:53

嵌入式开发必备:串口调试工具链全解析与实战应用

1. 串口调试的日常:为什么我们需要这些小工具? 搞嵌入式开发、硬件调试或者工业自动化,串口通信绝对是绕不开的一道坎。无论是STM32、ESP32这类微控制器,还是PLC、传感器、工控机这些工业设备,UART(通用异步…

2026/8/28 18:29:53

行李袋行业全解析:从产品定义到供应链实战的完整指南

1. 项目概述:从一只袋子看透一个产业 最近几年,无论是出差、旅行还是日常通勤,我发现身边用行李袋的人越来越多了。这玩意儿不再是火车站里农民工兄弟扛着的红蓝白条蛇皮袋,而是变成了设计多样、功能细分、甚至有点时尚感的出行装…

2026/8/28 18:29:53

Spoken Function Calling:从语音到函数调用的端到端交互范式

Spoken Function Calling,口语函数调用,正在成为 Large Audio Language Models 能力边界上最值得关注的方向之一。试想一个最常见的交互:你对着手机说“帮我把明天的闹钟改到七点”。传统链路里,手机先录音,再做语音识…

2026/8/28 18:24:52

Simulink数学建模入门:从弹簧质量阻尼系统到基于模型的设计

1. 项目概述:从“搭积木”到“造引擎”的思维跃迁提到Simulink,很多刚接触的朋友第一反应是:“哦,那个画框框连线的软件。” 这话对,但也不全对。它确实像一种高级的“搭积木”游戏,但如果你只把它当作一个…

2026/8/28 16:16:17

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/28 16:16:21

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 16:16:22

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/28 0:00:34

2026学术工具专业测评|Paperxie全维度性能实测报告[特殊字符]

2026年国内高校毕业论文审核体系全面升级,重复率查重AIGC人工智能检测双检机制正式常态化落地,多所高校明确执行“双项一票否决”制度,重复率超标或AI生成痕迹不达标,均直接取消答辩资格。随着抽检力度加大、学术规范要求升级&…

2026/8/28 0:00:34

凭什么稳居论文工具顶流[特殊字符]Paperxie综合实力深度全解析

2026年论文双检内卷严重,市面上AI论文工具层出不穷,但大多只是单一功能凑数、模板化严重、双检高风险、套路收费。 在一众同质化工具里,Paperxie能长期稳居行业顶流、成为应届生公认毕业神器,从来不是靠营销,而是靠实…

2026/8/28 0:00:34

2026论文工具深度测评|为什么Paperxie是目前最稳的学术工具✅

2026高校论文查重AIGC双检严查常态化。 市面上绝大多数AI论文工具依旧存在明显短板:模板感重、AI痕迹超标、改写毁逻辑、收费套路多、查重不准、格式适配差。 在全网工具普遍“偏科”的现状下,Paperxie凭借全维度均衡实力脱颖而出,成为适配…

2026/8/28 16:16:48

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/28 16:16:50

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/28 11:06:45

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…