Spring基础入门(一)之 理论基础概念

news2024/9/21 0:37:17

文章目录

  • 前言
  • Spring 体系结构
  • IOC&DI
    • 1.Ioc控制反转
    • 2.DI依赖注入
    • 3.目标
  • IOC相关之bean
    • 1.bean的基础配置
    • 2.bean的实例化
    • 3.bean的生命周期
    • 4.IOC管理第三方bean
  • DI相关之注入
  • 注解开发
    • 1.介绍
    • 2.注解之bean&DI
    • 3.注解管理第三方bean
    • 4.常见注解的含义
  • AOP
    • 1.介绍
    • 2.核心概念
    • 3.常见注解
  • AOP事务管理
    • 1.Spring事务
    • 2.事务角色
    • 3.事务属性

前言

这篇文章主要是介绍Spring主要的一些理论&基本概念(尽量不贴代码)
具体实战操作可以见 Spring(二)实战
常见面试题可以见Spring(三)面试(其实搞懂这篇文章,三的面试题就不难了,当然也可以用来查漏补缺)

Spring 体系结构

开局一张图

在这里插入图片描述

IOC&DI

Spring最重要的两大概念之一 —— IOC / DI

1.Ioc控制反转

(1)为什么引入Ioc?

之前Web开发中代码耦合度过高

业务层需要调用数据层的方法,就需要在业务层new数据层的对象。如果数据层的实现类发生变化,那么业务层的代码也需要跟着改变,发生变更后,都需要进行编译打包和重部署。如下图:

在这里插入图片描述

(2)所以提出解决方案——控制反转:

IOC:使用对象时,由主动new产生对象转换为由外部提供对象;此过程中对象创建控制权由程序转移到外部——此思想称为控制反转。

(3)怎么实现IoC?

  • Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的"外部"
  • IOC容器负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象
  • 被创建或被管理的对象在IOC容器中统称为Bean或Bean对象

2.DI依赖注入

(1)为什么要依赖注入?

当IOC容器中创建好service和dao对象后,程序能正确执行么?——不行,因为service运行需要依赖dao对象(所以需要绑定两者)

(2)解决方案——依赖注入

DI:在容器中建立bean与bean之间的依赖关系的整个过程

在这里插入图片描述

3.目标

  • 使用IOC容器管理bean(IOC)
  • 在IOC容器内将有依赖关系的bean进行关系绑定(DI)
  • 最终结果为:使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系.

IOC相关之bean

(后面都会用注解开发代替,这里还是采用标签)

1.bean的基础配置

通过bean标签的属性来进行基础配置

在这里插入图片描述

为什么bean默认为单例(singleton)?

  • bean为单例的意思是在Spring的IOC容器中只会有该类的一个对象
  • bean对象只有一个就避免了对象的频繁创建与销毁,达到了bean对象的复用,性能高

2.bean的实例化

对象已经能交给Spring的IOC容器来创建了,但容器如何来创建对象的呢?——bean的实例化过程

常见三种方法,主要是构造方法和factorybean

方法描述
构造方法实例化
静态工厂实例化
实例工厂实例化

3.bean的生命周期

bean对象从创建到销毁的整体过程。

最后以一张图总结bean相关:

在这里插入图片描述

4.IOC管理第三方bean

之前的类都是我们自己创建的,所以可以方便的交给IOC去管理,但是如果要用到第三方类/jar包,该怎么配置管理?
(标签配置类的方法略过,直接用下面的注解管理!)

DI相关之注入

(简单介绍下,后面有注解开发

(1)setter注入
对于引用数据类型使用的是<property name="" ref=""/>

对于简单数据类型使用的是<property name="" value=""/>

(2)构造器注入

(3)自动装配
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配——添加autowire属性

依赖注入相关:

在这里插入图片描述

注解开发

1.介绍

为什么要用注解开发?——简化配置开发(之前IOC和DI的实现都需要写在applicationContext.xml配置文件的bean标签中)

怎么实现注解开发?——删除原来的bean标签,直接在类上方添加@Component注解(注解在哪个类上方这个类就是bean)。如:

@Component("bookDao")
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book dao save ..." );
    }
}

与配置文件的对应关系是:

在这里插入图片描述

纯注解开发模式:使用Java类替代配置文件,即在配置类上添加@Configuration注解,将其标识为一个配置类,替换applicationContext.xml。然后在配置类上添加包扫描注解

@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
}

2.注解之bean&DI

将前面bean和DI通过配置实现的内容都换成对应的注解实现!

(1)bean

@Scope("prototype")——@Scope设置bean的作用范围(将某个类变成非单例)
@PostConstruct ——在构造方法之后执行,替换 init-method
@PreDestroy ——在销毁方法之前执行,替换 destroy-method

在这里插入图片描述

(2)DI依赖注入

@Autowired注解:写在属性上并将setter方法删除掉,自动装配

@Qualifier注解:指定注入哪个名称的bean对象,不能独立使用,和@Autowired一起使用
@Value——从properties配置文件中读取内容进行使用

3.注解管理第三方bean

@bean——将方法的返回值制作为Spring管理的一个bean对象
@Import——手动引入需要加载的配置类

4.常见注解的含义

名称类型位置作用
@Component类注解类定义上方设置该类为Spring管理的Bean
@Configuration类注解类定义上方设置该类为Spring配置类
@ComponentScan类注解类定义上方设置spring配置类扫描路径,用于加载使用注解格式定义的bean
@Scope类注解类定义上方设置该类创建对象的作用范围
可用于设置创建出的bean是否为单例对象
@Autowired属性注解 或 方法注解属性定义上方 或 标准set方法上方 或 类set方法上方为引用类型属性设置值
@Qualifier属性注解 或 方法注解属性定义上方 或 标准set方法上方为引用类型属性指定注入的beanId
@Value属性注解 或 方法注解属性定义上方 或 标准set方法上方为 基本数据类型 或 字符串类型 属性设置值
@Bean方法注解方法定义上方设置该方法的返回值作为spring管理的bean
@Import类注解类定义上方导入配置类

XML配置与注解对照图:

在这里插入图片描述

AOP

Spring最重要的两大概念之二 —— AOP

1.介绍

AOP(Aspect Oriented Programming):面向切面编程,一种编程范式,指导开发者如何组织程序结构。

作用:在不改动原始设计的基础上为其进行功能增强

2.核心概念

(1)连接点((JoinPoint)
程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等,在SpringAOP中,理解为方法的执行

(2)切入点(Pointcut)
匹配连接点的式子(需要增强的方法
在SpringAOP中,一个切入点可以描述一个具体方法,也可匹配多个方法

(3) 通知(Advice)
在切入点处执行的操作,也就是共性功能(最终以存放共性功能的方法呈现)

(4)通知类
定义通知的类,通知一般是方法,所以需要写在类中,这个类就是通知类

(5)切面(Aspect)
描述通知与切入点的对应关系

具体可以看下图:

在这里插入图片描述

3.常见注解

名称类型位置作用
@EnableAspectJAutoProxy配置类注解配置类定义上方开启注解格式AOP功能
@Aspect类注解切面类定义上方设置当前类为AOP切面类
@Pointcut方法注解切入点方法定义上方设置切入点方法
@Before方法注解通知方法定义上方设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前运行

AOP事务管理

1.Spring事务

事务其实是在Mysql数据库中最先接触,事务的作用是:在数据层保障一系列的数据库操作同成功同失败

Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败

为什么业务层也需要事务?

  • 转账业务会有两次数据层的调用,一次是加钱一次是减钱
  • 把事务放在数据层,加钱和减钱就有两个事务
  • 没办法保证加钱和减钱同时成功或者同时失败
  • 这个时候就需要将事务放在业务层进行处理

相关注解

名称类型位置作用
@EnableTransactionManagement配置类注解配置类定义上方设置当前Spring环境中开启注解式事务支持
@Transactional接口注解,类注解,方法注解业务层接口上方,业务层实现类上方,业务方法上方为当前业务层方法添加事务(如果设置在类或接口上方则类或接口中所有方法均添加事务)

2.事务角色

事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法

事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法

3.事务属性

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

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

相关文章

机械革命z2黑苹果双系统改造计划

原来的系统硬盘才256G实在太小了&#xff0c;趁固态便宜搞了一块大华C900Plus-b 1T固态&#xff0c;加上之前电脑里后加的一块海康威视c2000pro 1T准备搞一个winmac双系统生产力工具 黑苹果的详细教程b站上有很多&#xff0c;也可以看下国光师傅的博客&#xff0c;https://app…

webpack打包工具及原理

一、WebpackWebpack 是一个用于现代JavaScript应用程序的静态模块打包工具&#xff0c;可以很方面的管理模块的恶依赖。1.2.1 静态模块此处的静态模块指的是开发阶段&#xff0c;可以被 Webpack 直接引用的资源&#xff08;可以直接被获取打包进bundle.js的资源&#xff09;。当…

上传文件提示java.io.IOException: java.io.FileNotFoundException:(系统找不到指定的路径。)

解决上传文件提示java.io.IOException: java.io.FileNotFoundException&#xff1a;系统找不到指定的路径。前端上传失败效果&#xff1a;后端对应的异常输出信息&#xff1a;此时后端对应的上传关键代码&#xff1a;原因分析&#xff1a;解决方案&#xff1a;transferTo 传入参…

并发设计模式

1、Immutability模式&#xff1a;如何利用不变性解决并发问题&#xff1f;“多个线程同时读写同一共享变量存在并发问题”&#xff0c;这里的必要条件之一是读写&#xff0c;如果只有读&#xff0c;而没有写&#xff0c;是没有并发问题的。解决并发问题&#xff0c;其实最简单的…

【Docker】用开源umami监控你的站点访问量

新年到&#xff0c;祝大家兔年吉祥&#xff01;&#x1f389; 1.介绍 umami是一个开源的站点访问量监看程序&#xff0c;其支持docker部署到自己的服务器上。相比较百度等收费的网站信息监看&#xff0c;这种方式对于小站长来说更加实惠一些 2.docker安装的坑 2.1 docker-co…

附录2-tensorflow目标检测

源码来自作者Bubbliiiing&#xff0c;我对参考链接的代码略有修改&#xff0c;网盘地址 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;dvb1 目录 1 参考链接 2 环境 3 数据集准备 3.1 VOCdevkit/VOC2007 3.2 model_data/voc_classes.txt 3.3 voc_an…

Github每日精选(第100期): 从超过 50 亿的自然语言中获得洞察力ossinsight

介绍 OSS Insight 是一个强大的工具&#xff0c;通过分析超过 5 亿行的 GitHub 事件数据&#xff0c;提供对开源世界的全面、有价值和趋势洞察。 OSS Insight 的Data Explorer提供了一种探索 GitHub 数据的新方法。只需用自然语言提出您的问题&#xff0c;Data Explorer 就会…

PMP应该如何备考?

备考之初的我们&#xff0c;总会四处搜索PMP备考经验&#xff0c;希望能拿到那些高分通关前辈的备考经验和方法。众所周知PMP考试因为有35个学时培训的基本要求&#xff0c;所以肯定是要通过培训机构报名的。 一&#xff0c;首先我们需要了解到新的考纲 1.PMP模块划分发生变化…

开关电源环路稳定性分析(11)——观察法找零极点

大家好&#xff0c;这里是大话硬件。 这篇文章主要是分享如何用观察法直接写出补偿网络中的零极点的表达式。 在前面的文章中&#xff0c;我们分别整理了OTA和OPA型的补偿网络&#xff0c;当时有下面的结论。 针对某个固定的补偿网络&#xff0c;我们可以用数学的方法推导补偿…

2W薪资必备技能 —— Python接口自动化测试

目录 一、基础准备 1. 环境搭建 2. 接口基础知识 2.1 接口分类 2.2 接口请求类型 二、Requests 快速上手 1. requests基础 1.1 发送请求 1.2 参数传递 1.3 接口响应 1.4 接口其他处理 2. requests 高级应用 2.1 会话对象 2.2 请求与响应对象 2.3 准备的请求 2.…

设置软件以管理员权限开机自启动,MemReduct为例

目录 一.MemReduct 1.简介 2.下载方式 二.问题描述 三.具体操作 1.在windows搜索框搜索"任务计划程序" 并打开 2.在右方操作栏点击创建任务 3.常规选项 4.操作选项 5.触发器选项 6.条件选项 7.启动 一.MemReduct 1.简介 支持中文,是一个很方便的内存清理软…

pyTorch下载和cuda下载以及学习笔记

pytorch官方网站&#xff0c;cuda官方网站 CUDA下载&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive CUDNN下载&#xff1a;https://developer.nvidia.com/rdp/cudnn-download pytorch下载&#xff1a;pytorch.org 任务管理器中只显示CUDA占用的专用内存&#…

postman实现接口测试详细教程

各位小伙伴大家好, 今天为大家带来postman实战接口测试详细教程 一、通过接口文档集合抓包分析接口 通过fiddler抓包获取到注册接口URL地址及相关参数数据,并通过接口文档分析接口参数内容及参数说明, 如有必要的依赖条件必须进行梳理, 如token等 Fiddler抓包注册接口请求与…

领英精灵和领英助理哪个好?为什么领英精灵是LinkedIn最好的配套工具?

领英精灵和领英助理哪个好&#xff1f;这是很多使用领英工具的人会问的问题&#xff0c;这2个工具我都有使用过&#xff0c;下面说说我使用后的感受和区别&#xff1a; 公司背景 首先从他们的公司背景看&#xff0c;领英精灵是汇聚了国内领英专家针对领英规则设计的&#xff…

32、基于51单片机红外智能垃圾桶系统设计

摘要 随着现代化进程的日益推进&#xff0c;科技越来越发达&#xff0c;人们的生活水平也提高了&#xff0c;城市化程度越来越高&#xff0c;与此同时也带了许多问题&#xff0c;生活垃圾越来越多垃圾设施却不够完善。无论是在公共场合还是家庭厨房的垃圾大都是没有盖或者有盖…

C语言——指针(进阶详解)

文章目录指针概念的回顾1.字符指针1.1字符指针练习题2.指针数组3.数组指针3.1数组指针的定义3.2 &数组名和数组名的区别3.3数组指针的使用3.4一组简单的练习题4.数组和指针作为函数参数4.1一维数组传参**总结**4.2二维数组传参**总结**4.3一级指针传参**总结**4.4二级指针传…

Spring Boot RCE到内存马探索

前言 SpringBootVulExploit是Spring Boot漏洞Check list&#xff0c;但在真正的环境中进行漏洞利用还是有一段距离的&#xff0c;因此衍生出了SpringBootExploit工具。本文是对该Check list到内存马探索之路的记录。再此过程中学到了很多知识&#xff0c;收获了很多&#xff0…

线性双功能PEG羧酸Acetic Acid-PEG-Acetic Acid,AA-PEG-AA,羧酸PEG羧酸

产品名称&#xff1a; 1、英文&#xff1a;Acetic Acid-PEG-Acetic Acid AA-PEG-AA 2、中文&#xff1a;羧酸-聚乙二醇-羧酸 产品介绍&#xff1a; AA-PEG-AA是一种线性双功能PEG羧酸试剂。PEG和COOH基团之间存在亚甲基&#xff08;CH2&#xff09;键。AA-PEG-AA也称为CM-P…

测试平台系列——编写oss管理页面

上一节我们编写好了oss相关的crud接口&#xff0c;那这一节我们就得为oss数据的管理编写一个新的页面了。 即将做的是一个极度精简的文件管理页面。 效果图 因为我每次都是写完一段代码&#xff0c;然后编写对应教程&#xff0c;所以效果图这种东西自然是不在话下: 图片可以…

更改SAP GUI登录界面信息

在SAP GUI的登录界面&#xff0c;左部输入登录信息如客户端、用户名、密码等&#xff0c;右部空余部分可维护一些登录信息文本&#xff0c;如登录的产品、客户端说明及注意事项等&#xff0c;此项操作详见SAP Notes 205487 – Own text on SAPGui logon screen 维护文档使用的…