Spring的体系结构

简介: Spring的体系结构

一、Spring简介


1. Spring介绍


1.1 为什么要学


Spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%


专业角度来讲


简化开发,降低企业级开发的复杂性

框架整合,高效整合其他技术,提高企业级应用开发与运行效率


276fa7fc9d04c029a796cf1797142200_a5f942f9dd3d253516aebf8e7273f844.png


1.2 学什么


简化开发


IOC(控制反转)

AOP(面向切面编程)

事务处理

框架整合


MyBatis

MyBatis-plus

Struts

Struts2

Hibernate

……


1.3 怎么学


学习Spring框架设计思想

学习基础操作,思考操作与思想间的联系

学习案例,熟练应用操作的同时,体会思想


c956ce8e5330538f3b25558c7e799931_abd42cf5037a1503040c622f11c41906.png


2. 初识Spring


2.1 Spring家族


Spring官网:https://spring.io

Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能。


0f895d65dfd2aa7020d796b2c03f5d43_fdb9d0d4ddd02fbd3937b7b170f03499.png


2.2 Spring发展史


6b33248c22d39d5e984ded4d7f011a08_8e0f65a03277bcd352b16400245866a0.png


3. Spring体系结构


通过系统架构图,Spring能不能进行数据层开发?Spring能不能进行web层开发?


3.1 Spring Framework系统架构图


Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基。


28127d229f16b5fc6fa082b624e2c704_07678bf55449c4934c98ee52f3995c9f.png

c41ed3a4112872fce00f2a34d493ca99_f262b515a269255e71ce371d5f9b3085.png


3.2 Spring Framework课程学习路线


388f65418a991a1a118157fa10500056_e5b3fede541296fce34e42392b263e47.png


4. Spring核心概念


问题导入


问题1:目前我们的代码存在什么问题以及怎么解决这些问题?


问题2:请描述什么是IOC?什么是DI?


4.1 目前我们代码存在的问题


1f13abac3d60d01548fee051148749a0_52bbbbd4f0a9b9334085869e25a84c43.png


BookServiceImpl改变的例子:比如我们换了一种数据库管理系统。


代码书写现状

耦合度偏高

解决方案

使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象


4.2 核心概念


IOC(Inversion of Control)控制反转


使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。通俗的讲就是“将new对象的权利交给Spring,我们从Spring中获取对象使用即可”


Spring技术对IoC思想进行了实现


Spring提供了一个容器,称为IOC容器,用来充当IoC思想中的“外部”

IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean

DI(Dependency Injection)依赖注入


在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。


0b41a64f6f6b7c88a9d7893ffaee49e4_6bebeb6ccb916e4cc666593e461d163c.png


目标:充分解耦

使用IoC容器管理bean(IOC)

在IoC容器内将有依赖关系的bean进行关系绑定(DI)

最终效果

使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系

相关文章
|
开发工具 Docker 容器
Docker(32)- 如何修改 docker 容器的启动参数
Docker(32)- 如何修改 docker 容器的启动参数
1993 0
Docker(32)- 如何修改 docker 容器的启动参数
|
存储 Ubuntu 数据库
Dockerfile(14) - VOLUME 指令详解
Dockerfile(14) - VOLUME 指令详解
5454 0
|
存储 编解码 5G
LDPC 在 5G-NR 中的标准进展 | 带你读《5G-NR信道编码》之十二
本章节带你了解LDPC 在 5G-NR 中的标准进展 ,观察5G是如何通过LDPC起作用的。
LDPC 在 5G-NR 中的标准进展  | 带你读《5G-NR信道编码》之十二
wireshark解析rtp协议,流媒体中的AMR/H263/H264包的方法
抓到完整的流媒体包之后,用wireshark打开,其中的包可能不会自动映射成RTP+AMR/H263/H264的包,做如下修改操作即可:1.  把UDP 包解析成RTP/RTCP包。选中UDP包,右键,选择Decode As,选RTP2.  把RTP Payload映射成实际的媒体格式。
3550 0
|
存储 关系型数据库 MySQL
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
575 7
|
Python
python获取字符串()里面的字符
在Python中,如果你想获取字符串中括号(比如圆括号`()`、方括号`[]`或花括号`{}`)内的字符,你可以使用正则表达式(通过`re`模块)或者手动编写代码来遍历字符串并检查字符。 这里,我将给出使用正则表达式的一个例子,因为它提供了一种灵活且强大的方式来匹配复杂的字符串模式。 ### 使用正则表达式 正则表达式允许你指定一个模式,Python的`re`模块可以搜索字符串以查找匹配该模式的所有实例。 #### 示例:获取圆括号`()`内的内容 ```python import re def get_content_in_parentheses(s): # 使用正则表达
407 36
|
SQL 关系型数据库 MySQL
Linux对MySQL语法校验
【5月更文挑战第4天】
282 2
|
移动开发 前端开发 JavaScript
uniapp生命周期
uniapp生命周期
334 1
|
算法 Unix Shell
【Shell 命令集合 系统管理 】Linux 显示或设置系统时间和日期 date命令 使用指南
【Shell 命令集合 系统管理 】Linux 显示或设置系统时间和日期 date命令 使用指南
631 0