深入解析Spring基本概念和核心思想

文章目录

  • 基本概念
    • IoC
      • Ioc容器
      • IoC理解
      • IoC的步骤
      • Spring中使用ioc的步骤
    • Aop
      • Aop的理解
      • Aop的步骤
    • 控制反转
      • 谁控制谁? 控制什么?为何叫反转(对应于正向)?哪些方面反转了?为何需要反转?
    • 依赖
      • 什么是依赖(按名称理解、按动词理解)? 谁依赖于谁? 为什么需要依赖? 依赖什么东西?
    • 注入
      • 谁注入于谁? 注入什么东西? 为何要注入?
    • 依赖注入和控制反转是同一概念吗
    • IoC/DI是什么
      • IoC/DI是什么?能做什么?怎么做?用在什么地方?
    • 什么是外部资源
    • 数据访问
    • Wed开发

基本概念

  1. 使用spring后,被spring管理的类,不需要再new。
  2. 要想类被spring管理,则需要通过bean的方式,把类引入到spirng的配置文件中。

IoC

Ioc容器

简单的理解就是: 实现IoC思想,并提供对象创建,对象装配以及对象生命周期管理的软件就是Ioc容器

IoC理解

  1. 应用程序无需主动new对象,而是描述对象如何被创建
  2. 应用程序不需要主动装配对象之间的依赖关系,而是描述需要那个服务,IoC容器会帮你装配,被动接受装配
  3. 主动变被动,是一种让服务消费者不一直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则

IoC的步骤

Spring的主要通过bean标签来实现IOC。

<!-- id属性给这个bean指定一个唯一的名,供spring的其他组件来引用 class属性指定bean的全路径
-->
<bean id="hello" class="com.hello.Hello"><!--property通过set方法给对应的属性设置值value属性可以直接设置值ref属性引用其他的组件--><property name="who" value="t6041"></property><property name="ink" ref="inkColor"></property>
</bean>

Spring中使用ioc的步骤

  1. 创建类
  2. 通过bean标签把bean放到spring中
  3. 初始化spring配置文件拿到spring的上下文,通过spring的上下文获取对应的bean。

Aop

Aop的理解

将复杂的要求分解出不同方面,将散布在系统中的"公共功能" “集中解决”
采用代理机制组装起来运行,在 “不改变源程序” 的基础上对代码段进行增强处理,增加新的功能

Aop的步骤

  1. 创建一个增强。并纳入spring的容器中。使普通类变成增强。
    • 使用类似aop:before标签把普通变成增强
    • 实现BeforeAdvice接口也可以把普通类变成增强
<bean id="loggerAdvice" class="com.advice.LoggerAdvice"></bean>
  1. 创建切入点。
<aop:pointcut expression="execution(public void print())" id="pointcut"/>
  1. 定义切面。包涵增强的方法和切入点。
<aop:aspect ref="loggerAdvice"><aop:before method="before" pointcut-ref="pointcut"/>
</aop:aspect>

控制反转

谁控制谁? 控制什么?为何叫反转(对应于正向)?哪些方面反转了?为何需要反转?

  1. 谁控制谁? -->loC/DI容器控制应用程序
  2. 控制什么? -->IoC/DI容器控制对象本身的创建、实例化; IoC/DI容器控制对象之间的依赖关系
  3. 为何叫反转(对应于正向)? -->因为现在应用程序不能主动去获取外部资源了,而是被动等待IoC/DI容器给它注入它所需要的资源,所以称为反转
  4. 那些方面反转了? -->1.创建对象 2.程序获取资源的方式反了
  5. 为何需要反转? -->1引入IoC/DI容器过后体系更为松散,而且管理更有序; 2.类之间真正实现了松散耦合

依赖

什么是依赖(按名称理解、按动词理解)? 谁依赖于谁? 为什么需要依赖? 依赖什么东西?

  1. 什么是依赖(按名称理解、按动词理解)? -->依赖(按名理解):依赖关系; 依赖(按动词理解)依赖的动作
  2. 谁依赖谁? -->应用程序依赖于IoC/DI容器
  3. 为什么需要依赖? -->因为发生了反转,应用程序依赖的资源都是IoC/DI容器里面
  4. 依赖什么东西? -->应用程序依赖于IoC/DI容器,依赖IoC/DI容器为它注入所需的资源

注入

谁注入于谁? 注入什么东西? 为何要注入?

  1. 谁注入于谁? -->IoC/DI容器注入于应用程序
  2. 注入什么东西? -->注入应用程序需要的外部资源,比如关系依赖
  3. 为何要注入? -->因为程序要正常运行需要这些外部资源

依赖注入和控制反转是同一概念吗

不是同一概念,其实他们两个描述的是同一件事件,但是是从不同角度来说: 控制反转从IoC/DI容器的角度; 依赖注入是从应用程序的角度

  1. 控制反转的描述: IoC/DI容器反过来控制应用程序,控制应用程序所需要的外部资源(比如: 外部资源)
  2. 依赖注入描述: 应用程序依赖IoC/DI容器,依赖注入他所需的外部资源

IoC/DI是什么

IoC/DI是什么?能做什么?怎么做?用在什么地方?

  1. IoC/DI是什么
    • IoC: 就是使用IoC/DI容器反过来控制应用程序所需要的外部资源,这样的一种程序开发思想
    • DI: 就是应用程序依赖IoC/DI容器来注入所需的外部资源,这样一种程序开发的思想
  2. 能做什么 -->松散耦合对象
  3. 怎么做 -->使用Spring框架,里面有实现好了的IoC/DI容器
  4. 用在什么地方 -->凡是程序里面需要外部资源的情况,都可以考虑使用IoC/DI容器

什么是外部资源

对于一个类来讲,所谓的外部资源,就是指在自己类不能得到或实现的东西,比如说: 在一个类里面要读取配置文件,那么这个配置文件就相当于这个类的外部资源,又比如: A类里面调用B类,那么对于A类来讲B类就是外部资源

数据访问

Spring提供了对各种数据访问技术的支持,包括JDBC、ORM(对象关系映射)框架(如Hibernate、MyBatis)、事务管理等。它提供了一种统一的访问数据的方式,并且可以方便地切换或组合不同的数据访问技术。

  1. JDBC:Spring提供了JdbcTemplate类来简化JDBC操作,包括连接管理、异常处理和事务管理等
  2. ORM(对象关系映射):Spring提供了对ORM框架的集成支持,包括Hibernate、JPA、MyBatis等。通过Spring的ORM支持,可以更方便地进行数据库操作,不需要编写繁琐的数据库访问代码
  3. 事务管理:Spring提供了对事务的封装和管理,包括编程式事务和声明式事务两种方式。通过使用Spring的事务管理支持,可以简化事务的使用,提高代码的可维护性和可读性。
  4. 数据库连接池:Spring提供了对常见数据库连接池的集成支持,例如C3P0、HikariCP等。通过使用Spring的数据库连接池,可以更高效地管理连接资源,提高应用的性能和可扩展性。
  5. NoSQL数据库:Spring提供了对一些NoSQL数据库的集成支持,例如MongoDB、Redis等。通过Spring的支持,可以更方便地操作这些NoSQL数据库,实现数据的持久化和缓存。

Wed开发

Web是Spring框架中用于开发Web应用程序的模块。它提供了一组功能强大的类和工具,用于简化Web应用程序的开发和管理。

  1. MVC(模型-视图-控制器)架构:Spring Web提供了基于MVC架构的Web框架,通过定义和组织控制器、视图和模型,使得开发人员可以更容易地实现业务逻辑和界面交互的分离。
  2. 请求处理:Spring Web提供了多种方式来处理HTTP请求,包括基于注解的请求映射、路径变量、请求参数的绑定、请求验证和错误处理等。开发人员可以根据具体需求选择最合适的请求处理方式。
  3. 视图渲染:Spring Web支持多种视图技术,包括JSP、Thymeleaf、Freemarker等,开发人员可以根据具体需求选择合适的视图渲染方式。
  4. 表单处理:Spring Web提供了表单处理的支持,包括表单数据的绑定、验证、错误处理和表单重复提交的防御等。

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

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

相关文章

vscode如何汉化

首先我们到vscode官网下载 链接如下&#xff1a; Visual Studio Code - Code Editing. Redefined 根据自己需要的版本下载就好 下载并且安装完毕之后 运行vscode 然后按快捷键 CTRLSHIFTX 打开安装扩展界面 搜索简体中文 安装就可以了 谢谢大家观看

npm ERR!Cannot read properties of null(reading ‘pickAlgorithm’)报错问题解决

当在使用npm包管理器或执行npm命令时&#xff0c;有时候会遇到“npm ERR!Cannot read properties of null(reading ‘pickAlgorithm’)”这个错误提示&#xff0c;这是一个常见的npm错误。 这个错误提示通常说明在使用npm包管理器时&#xff0c;执行了某个npm命令&#xff0c;…

学习笔记整理-正则表达式-01-认识正则

一、基本认识 1. 什么是正则表达式 正则表达式(regular expression)描述了字符串"构成模式"&#xff0c;经常被用于检查字符串是否符合预定的格式要求。 用一个例子快速演示正则表达式基本使用方法&#xff1a;检查某个字符串是否是6位数字 // 要检查的字符串va…

第五课:联合体或共用体 Union

功能描述&#xff1a;联合体或共用体 Union 的介绍及使用方法 一、Union 简介 共同体&#xff08;union&#xff09;也称为联合体&#xff0c;它能在同一个内存空间中存储不同的数据类型&#xff08;不是同时存储&#xff09;&#xff0c;其典型的用法是&#xff0c;设计一种表…

Vue3 —— watchEffect 高级侦听器

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 Vue3 中新增了一种特殊的监听器 watchEffect&#xff0c;它的类型是&#xff1a; function watchEffect(effect: (onCleanup: OnCleanup) > void,o…

整理mongodb文档:find方法查询数据

个人博客 整理mongodb文档:find方法查询数据 求关注&#xff0c;求批评&#xff0c;求指出&#xff0c;如果哪儿不清晰&#xff0c;请指出来&#xff0c;谢谢 文章概叙 如题&#xff0c;本文讲的是如何用find查询数据&#xff0c;如何在数组、字段、对象中查询&#xff0c;以…

自然语言处理技术:NLP句法解析树与可视化方法

自然语言处理(Natural Language Processing,NLP)句法解析树是一种表示自然语言句子结构的图形化方式。它帮助将句子中的每个词汇和短语按照语法规则连接起来,形成一个树状结构,以便更好地理解句子的语法结构和含义。句法解析树对于理解句子的句法关系、依存关系以及语义角…

Python实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音

本示例使用的设备&#xff1a;RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) # -*- coding: utf-8 -*- import time import datetime import socket import threading#将中文信息转换编码&#xff0c;显示文字、TTS语音都需要转换-------…

从入门到精通Python隧道代理的使用与优化

哈喽&#xff0c;Python爬虫小伙伴们&#xff01;今天我们来聊聊如何从入门到精通地使用和优化Python隧道代理&#xff0c;让我们的爬虫程序更加稳定、高效&#xff01;今天我们将对使用和优化进行一个简单的梳理&#xff0c;并且会提供相应的代码示例。 1. 什么是隧道代理&…

SpringCloud Gateway:status: 503 error: Service Unavailable

使用SpringCloud Gateway路由请求时&#xff0c;出现如下错误 yml配置如下&#xff1a; 可能的一种原因是&#xff1a;yml配置了gateway.discovery.locator.enabledtrue&#xff0c;此时gateway会使用负载均衡模式路由请求&#xff0c;但是SpringCloud Alibaba删除了Ribbon的…

无涯教程-Perl - setpwent函数

描述 此功能将枚举设置(或重置)到密码条目集的开头。应该在第一次调用getpwent之前调用此函数。 语法 以下是此函数的简单语法- setpwent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perlwhile(($name, $passwd, $uid, $gid, $quota, …

C++写文件,直接写入结构体

C写文件&#xff0c;直接写入结构体 以前写文件都是写入字符串或者二进制再或者就是一些配置文件&#xff0c;今天介绍一下直接写入结构体&#xff0c;可以在软件参数较多的时候直接进行读写&#xff0c;直接将整个结构体写入和读取&#xff0c;看代码&#xff1a; #include&…

tomcat中的BIO与NIO发展

tomcat中的NIO发展 前言 Tomcat目前支持BIO&#xff08;阻塞 I/O&#xff09;、NIO&#xff08;非阻塞 I/O&#xff09;、AIO&#xff08;异步非阻塞式IO&#xff0c;NIO的升级版&#xff09;、APR&#xff08;Apache可移植运行库&#xff09;模型&#xff0c;本文主要介绍NI…

iceberg系列之 hadoop catalog 小文件合并实战

背景 flink1.15 hadoop3.0pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…

UBuntu18.04 Qt之双HDMI屏切换

UBuntu18.04 Qt之双HDMI接2个4K屏并分别设置分辨率、主屏、副屏 一、设置HDMI-2为主屏 在main函数里面添加&#xff1a; #include "mainwindow.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);{long nTotal 0;c…

spring cloud gateway中配置uri

gateway中配置uri配置有三种方式: websocket方式&#xff1a;uri: ws://localhost:9000http方式: uri: http://localhost:8130/lb注册中心配置方式&#xff08;注册的服务名称&#xff09;: uri: lb://monitor-ms gateway的lb方式识别的服务名称命名规则&#xff1a; "[…

设计模式——适配器模式

引入实例 说起适配器其实在我们的生活中是非常常见的&#xff0c;比如&#xff1a;学校的宿舍的电压都比较低&#xff0c;而有的学生想使用大功率电器&#xff0c;宿舍的就会跳闸&#xff0c;然而如果你使用一个适配器&#xff08;变压器&#xff09;就可以使用了&#xff08;…

Jtti:windows虚拟内存最小值太低如何解决

当Windows虚拟内存的最小值设置过低时&#xff0c;可能会导致系统性能下降、应用程序崩溃甚至系统不稳定。解决方法包括&#xff1a; 调整虚拟内存设置&#xff1a; 可以通过以下步骤调整虚拟内存的设置&#xff1a; 右键点击“此电脑”或“计算机”&#xff0c;选择“属性”。…

被迫学习一波Linux命令

事情起因 部署一个服务&#xff0c;人家说了最低配置是3G&#xff0c;我没当回事&#xff0c;拿着个2G的服务器直接就上了&#xff0c;结果&#xff0c;哈哈&#xff0c;都能猜到结果&#xff1a;服务器内存爆了&#xff01;&#xff01;&#xff01;而且最可气的是服务器还登…

ansible案列之LNMP分布式剧本

LNMP分布式剧本 一&#xff1a;环境设置二&#xff1a;编写Nginx剧本准备nginx下载源准备配置文件并开放PHP的访问路径准备php测试页面编写nginx剧本 三&#xff1a;编写Mysql剧本编写密码获取脚本准备Mysql的yum源编写mysql剧本 四&#xff1a;准备PHP剧本准备两个配置文件编写…