当前位置: 首页 > news >正文

深入解析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提供了表单处理的支持,包括表单数据的绑定、验证、错误处理和表单重复提交的防御等。

相关文章:

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

文章目录 基本概念IoCIoc容器IoC理解IoC的步骤Spring中使用ioc的步骤 AopAop的理解Aop的步骤 控制反转谁控制谁? 控制什么?为何叫反转(对应于正向)?哪些方面反转了?为何需要反转? 依赖什么是依赖(按名称理解、按动词理解)? 谁依赖于谁? 为什么需要依赖? 依赖什么东西?…...

Redis数据结构——快速列表quicklist、快表

定义 Redis中的数据结构&#xff0c;链表和压缩列表这两种数据结构是列表对象的底层实现方式。 当时考虑到链表的附加空间太大&#xff0c;节点的内存都是单独分配的&#xff0c;还会导致内存碎片化问题严重。 因此从Redis3.2开始&#xff0c;对列表的底层数据结构进行了改造&…...

excel统计函数篇3之rank系列

下面这三个函数都是返回指定数据在指定范围中的数据中的名次 1、RANK(number,ref,[order]):返回一列数字的数字排位&#xff08;数字排位是相对于列表中其他值的大小&#xff09; rank(数字&#xff0c;数字序列&#xff0c;升序/降序) – 数字在数字序列中的名次 2、RANK.AV…...

Flink 火焰图

方式一 使用 Flink Web UI 的 Flame Graph Flink 自己也支持了 Task 粒度的 Flame Graphs 功能&#xff0c;并且可以细化到 subtask 粒度。 第一步&#xff1a;配置启用功能 Flink 作业动态参数里增加配置&#xff1a;“rest.flamegraph.enabled”: “true” 并重启作业。当前…...

kubectl get 中英文对照

wlzx059node01:~$ kubectl get --help Display one or many resources. (显示一个或多个资源。)Prints a table of the most important information about the specified resources. You can filter the list using a label selector and the --selector flag. If the desired …...

R语言APSIM模型进阶应用与参数优化、批量模拟实践技术

随着数字农业和智慧农业的发展&#xff0c;基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…...

无涯教程-Perl - times函数

描述 此函数返回一个四元素列表,为当前进程及其子进程提供用户,系统,子进程和子系统时间。 语法 以下是此函数的简单语法- times返回值 此函数返回ARRAY,($usertime,$systemtime,$childsystem,$childuser) 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -w($use…...

《计算机网络:自顶向下方法》第五章--网络层:控制平面

控制平面作为一种网络范围的逻辑&#xff0c;不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报&#xff0c;而且控制网络层组件和服务如何配置和管理 传统上&#xff0c;控制平面功能与数据平面的转发功能在一起实现&#xff0c;在路由器中作为统一的整体…...

Mysql存储引擎中InnoDB与Myisam的主要区别

在mysql命令窗口中,输入show engins,可以看到mysql的所有引擎,那么这么多的引擎,我们经常使用到的也就两种,MyISAM和InnoDB,这两种引擎究竟有什么区别呢? 1, 事务处理 innodb 支持事务功能,myisam 不支持。 Myisam 的执行速度更快,性能更好。 2,select ,update ,inse…...

数据仓库 ODS->DWD->DWS->ADS

1.数据仓库DW 1.1简介 Data warehouse&#xff08;可简写为DW或者DWH&#xff09;数据仓库&#xff0c;是在数据库已经大量存在的情况下&#xff0c;为了进一步挖掘数据资源、为了决策需要而产生的&#xff0c;它是一整套包括了etl、调度、建模在内的完整的理论体系。数据仓库…...

【SpringBoot】SpringBoot获取不到用户真实IP怎么办

文章目录 前言问题原因解决方案修改Nginx配置文件SpringBoot代码实现 前言 项目部署后发现服务端无法获取到客户端真实的IP地址&#xff0c;这是怎么回事呢&#xff1f;给我都整懵逼了&#xff0c;经过短暂的思考&#xff0c;我发现了问题的真凶&#xff0c;那就是我们使用了N…...

LightDB 23.3 plorasql 函数支持inout参数输出

开篇立意 oracle PLSQL函数中返回值有两种情况&#xff1a; &#xff08;1&#xff09;使用return返回值&#xff1b; &#xff08;2&#xff09;使用out修饰的参数&#xff08;oracle不支持inout&#xff09; SQL> create function yu(id inout int) return int asbeginn…...

SpringBoot第41讲:SpringBoot集成Redis - 基于RedisTemplate+Jedis的数据操作

SpringBoot第41讲:SpringBoot集成Redis - 基于RedisTemplate+Jedis的数据操作 Redis是最常用的KV数据库,Spring 通过模板方式(RedisTemplate)提供了对Redis的数据查询和操作功能。本文是SpringBoot第41讲,主要介绍基于RedisTemplate + Jedis方式对Redis进行查询和操作的案…...

用 React+ts 实现无缝滚动的走马灯

一、走马灯的作用 走马灯是一种常见的网页交互组件&#xff0c;可以展示多张图片或者内容&#xff0c;通过自动播放或者手动切换的方式&#xff0c;让用户能够方便地浏览多张图片或者内容。 本次实现的不是轮播图而是像传送带一样的无限滚动的形式。 二、需求梳理 走马灯可设…...

三维模型OSGB格式轻量化重难点分析

三维模型OSGB格式轻量化重难点分析 在三维模型应用中&#xff0c;为了适应移动设备的硬件和网络限制等问题&#xff0c;OSGB格式轻量化处理已经成为一个重要的技术手段。但是&#xff0c;在实际应用中&#xff0c;OSGB格式轻量化仍然存在着一些重难点问题。下面将对这些问题进行…...

C#__事件event的简单使用:工具人下楼问题

// 工具人类 namespace DownStair {delegate void DownStairDelegate(); // 定义了一个下楼委托class ToolMan{public string Name { get; set; } // 声明工具人的名字属性// public DownStairDelegate downStairDelegate null; // 初始化委托downStair为空委托// 解决方案pu…...

初识Spring-ioc

初识Spring-ioc 1. Spring的简介2.Spring容器ioc的特点3.spring注入方式1.Setter方法注入&#xff08;Setter Injection&#xff09;&#xff1a;通过Setter方法来注入依赖。在类中定义对应的Setter方法&#xff0c;并在方法中接收依赖的参数&#xff0c;Spring容器会通过调用S…...

windows10 安装WSL2, Ubuntu,docker

AI- 通过docker开发调试部署ChatLLM 阅读时长&#xff1a;10分钟 本文内容&#xff1a; window上安装ubuntu虚拟机&#xff0c;并在虚拟机中安装docker&#xff0c;通过docker部署数字人模型&#xff0c;通过vscode链接到虚拟机进行开发调试.调试完成后&#xff0c;直接部署在云…...

Java面试题目汇总

一、面向对象的三个基本特征 2、方法重载和方法重写的概念和区别 3、接口和内部类、抽象类的特性 4、文件读写的基本类 **5、串行化的注意事项以及如何实现串行化 6、线程的基本概念、线程的基本状态以及状态之间的关系 7、线程的同步、如何实现线程的同步 8、几种常用的数据结…...

【ARM 嵌入式 编译系列 6 -- GCC objcopy, objdump, readelf, nm 介绍】

文章目录 GCC objcopy 简介objcopy 常用参数GCC objdump 简介GCC readelf 介绍GCC nm 介绍上篇文章:ARM 嵌入式 编译系列 5 – GCC 内建函数 __builtin 详细介绍 下篇文章:ARM 嵌入式 编译系列 7 – ARM GCC 链接脚本详细讲解 GCC objcopy 简介 objcopy 是 GNU二进制工具集(…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...