Spring快速学习

news2024/12/29 14:43:08

目录

IOC控制反转

引言

IOC案例

Bean的作用范围 

Bean的实例化

bean生命周期

DI 依赖注入

setter注入

构造器注入

自动装配

自动装配的方式

注意事项;

集合注入

核心容器

容器的创建方式

Bean的三种获取方式

Bean和依赖注入相关总结

IOC/DI注解开发

注解开发定义Bean

纯注解开发模式

总结从配置文件到注解开发

注解开发依赖注入

AOP

AOP的实现步骤

1.定义通知类和通知

2.定义切入点

3.制作切面

4.将通知类配给容器并标识其为切面类

Aop通知类型

Aop事务管理

怎么实现Spring的事务呢

知识点1:@EnableTransactionManagement

知识点2:@Transactional

Spring的学习主线是IOC、AOP、声明式事务

IOC控制反转

引言

目前项目中存在的问题,耦合度太高,如下例:

针对这个问题,Spring就提出了一个解决方案:
使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象
这种实现思就是Spring的一个核心概念。

  • 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
  • Spring技术对IOC思想进行了实现,Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的"外部"
  • IOC容器负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象。
  • 创建或被管理的对象在IOC容器中统称为Bean,IOC容器中放的就是一个个的Bean对象

当IOC容器中创建好service和dao对象后,程序能正确执行么?
不行,因为service运行需要依赖dao对象
IOC容器中虽然有service和dao对象
但是service对象和dao对象没有任何关系
需要把dao对象交给service,也就是说要绑定service和dao对象之间的关系

这个时候就需要用到DI(依赖注入)

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

小结:

IOC:控制反转,控制反转的是对象的创建权
DI:依赖注入,绑定对象与对象之间的依赖关系

Spring创建了一个容器用来存放所创建的对象,这个容器就叫IOC容器

容器中所存放的一个个对象就叫Bean或Bean对象

IOC案例

1.在配置文件中完成Bean的配置

2.怎么获取ioc容器

现在虽然解耦了,但是在 BookServiceImpl的类中依然存在 BookDaoImpl对象的
new操作,它们之间的耦合度还是比较高,这块该如何解决,就需要用到DI:依赖注入

现在的需求是在BookServiceImpl类中删除new对象的方式,使用Spring的DI完成Dao层的注入

1.为BookDao提供setter方法

配置文件中添加依赖注入的配置

name="bookDao"中 bookDao的作用是让Spring的IOC容器在获取到名称后,将首字母大写,前
面加set找对应的 setBookDao()方法进行对象注入。

ref="bookDao"中 bookDao的作用是让Spring能在IOC容器中找到id为 bookDao的Bean对象给
bookService进行注入

Bean的作用范围 

怎么看一个Bean是不是单例

同一个bean获取两次,将对象打印到控制台,看打印出的地址值是否一致。一致就是单例。

将scope设置为 prototype,就是非单例了。

小结:

Bean的实例化

  bean本质上就是对象,对象在new的时候会使用构造方法完成,那创建bean也是使用构造方法完成的。每一个类默认都会提供一个无参构造函数,所以其实真正在使用这种方式的时候,我们什么也不需要做。
Spring底层用的是反射

Spring的IOC实例化对象的三种方式分别是

bean生命周期

DI 依赖注入

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

Spring为我们提供了两种注入方式,分别是:

setter注入

可以看下面的例子,注入的是引用类型

那注入简单类型如何操作呢

构造器注入

构造器注入也就是构造方法注入

注入简单类型

总结;

根据前面的学习大家可以看到,编写配置文件也是非常麻烦的一件事情,那我们也可以对此进行简化,我们将使用自动装配

自动装配

IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配

自动装配的方式

如何操作呢?

注意事项;

集合注入

前面我们已经能完成引入数据类型和简单数据类型的注入,但是还有一种数据类型集合,集合中既可以装简单数据类型也可以装引用数据类型,对于集合,在Spring中该如何注入呢?

常见的集合类型有哪些?

  • 数组
  • List
  • Set
  • Map
  • Properties

1.与之前没有区别的是先生成setter方法

2.

核心容器

容器的创建方式

Bean的三种获取方式

Bean和依赖注入相关总结

bean相关

依赖注入相关

IOC/DI注解开发

配置文件写的真的让人很痛苦,终于来学注解开发了

注解开发定义Bean

对应关系

最后在配置文件中写一下就行了

这样一下子可以少写很多的配置文件了

对于@Component注解,还衍生出了其他三个注解 @Controller、 @Service、 @Repository

方便我们后期在编写类的时候能很好的区分出这个类是属于 表现层、 业务层还是 数据层的类。

纯注解开发模式

就是一点点的配置文件都不写了

将配置文件applicationContext.xml删除掉,使用类来替换

修改点1:

修改点2:

总结从配置文件到注解开发

注解开发依赖注入

简单数据类型的注入

AOP

AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程
序结构。AOP是在不改原有代码的前提下对其进行增强.

在不惊动(改动)原有设计(代码)的前提下,想给谁添加功能就给谁添加。这个也就是Spring的理念

AOP 中的概念: 连接点、切入点、通知、通知类。

  • 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等
  • 切入点(Pointcut):匹配连接点的式子
  • 通知(Advice):在切入点处执行的操作,也就是共性功能在SpringAOP中,功能最终以方法的形式呈现
  • 通知类:定义通知的类
  • 切面(Aspect):描述通知与切入点的对应关系

AOP的实现步骤

1.定义通知类和通知

2.定义切入点

3.制作切面

4.将通知类配给容器并标识其为切面类

Aop通知类型

AOP可以简化项目中的事务管理,也是一大亮点。所以我们现在来学习一下AOP事务管理

Aop事务管理

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

Spring为了管理事务,提供了一个平台事务管理器 PlatformTransactionManager。

PlatformTransactionManager只是一个接口,Spring还为其提供了一个具体的实现。

怎么实现Spring的事务呢

1.首先在需要添加事务的接口、类或者方法上添加@Transactional注解

注意:

@Transactional可以写在接口类上、接口方法上、实现类上和实现类方法上

  • 写在接口类上,该接口的所有实现类的所有方法都会有事务

  • 写在接口方法上,该接口的所有实现类的该方法都会有事务

  • 写在实现类上,该类中的所有方法都会有事务

  • 写在实现类方法上,该方法上有事务

  • 建议写在实现类或实现类的方法上

2.在JdbcConfig类中配置事务管理器

3.开启事务注解

在SpringConfig的配置类中开启

@EnableTransactionManagement

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

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

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

相关文章

探索四川财谷通抖音小店:安全与信赖的购物新体验

在数字经济蓬勃发展的今天,抖音平台凭借其庞大的用户基础和强大的内容生态,逐渐成为了电商领域的一股不可忽视的力量。其中,四川财谷通抖音小店作为这一浪潮中的佼佼者,不仅以其丰富的商品种类和独特的品牌魅力吸引了众多消费者的…

【数据结构】排序 —— 快速排序(quickSort)

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:数据结构、LeetCode专栏 📚本系…

Python酷库之旅-第三方库Pandas(067)

目录 一、用法精讲 266、pandas.Series.dt.second属性 266-1、语法 266-2、参数 266-3、功能 266-4、返回值 266-5、说明 266-6、用法 266-6-1、数据准备 266-6-2、代码示例 266-6-3、结果输出 267、pandas.Series.dt.microsecond属性 267-1、语法 267-2、参数 …

集合基础知识及练习

import java.util.ArrayList;public class Solution {//将字符串转化为整数public static void main(String[] args) {ArrayList<String> listnew ArrayList();list.add("aaa");list.add("aaa");list.add("bbb");list.add("ccc"…

【Python】Django Web 框架

一、常用的Web开发框架 1.Django Django是一个由Python写成的开放源代码的Web应用框架。这套框架的主要目标是使开发复杂、数据库驱动的网站变得简单。Django注重组件的重用性和“可拔插性”、敏捷开发和DRY(Dont Repeat Yourself)法则 2.Flask Flask是一个微型的Python开发…

音视频开发 sdl库

介绍 SDL (Simple DirectMedia Layer) 是一个跨平台的开源多媒体库,它提供了底层访问多种硬件的接口,如音频、视频、输入设备等。它主要用于游戏开发,但也可用于其他类型的多媒体应用程序。下面是 SDL 的一些主要特点: 跨平台性: SDL 支持多种操作系统,包括 Windows、macOS、L…

如何在linux系统上安装tomcat应用程序?

1&#xff09;首先查看安装包信息 yum info tomcat yum info tomcat 2&#xff09;安装 yum -y install tomcat yum -y install tomcat 3&#xff09;查看安装是否成功 rpm -q tomcat rpm -q tomcat 4&#xff09;如果输出一下内容则代表安装成功 tomcat-7.0.76-16.el7_9.n…

新手教学系列——Redis 实现分布式锁:让系统更高效的两种策略

在分布式系统中,分布式锁是一种常见的解决方案,用于确保同一资源不会被多个节点同时访问。Redis 作为一种高性能的内存数据库,提供了方便快捷的分布式锁实现方式。今天,我们将深入探讨如何使用 Redis 实现分布式锁,并且介绍两种常见的策略:占位锁和等待锁。 一、什么是分…

Linux源码阅读笔记13-进程通信组件中

架构图 代码分析 loff_t lnchannel_llseek(struct file *filp, loff_t offset, int whence) {loff_t newpos;switch(whence) {case 0:newpos offset;break;case 1:newpos filp->f_pos offset;break;case 2:return -EINVAL;}if (newpos < 0 || newpos > LNCHANNEL_…

剪映国际版(CapCut) 2024 下载 安装 汉化

将 剪映国际版&#xff08;CapCut&#xff09; 2024 压缩包解压到本地&#xff1a; 点击蓝色字体下载压缩包 提取码 jwsg 鼠标右键 点击 CapCut 3.0.0.exe 选择 以管理员身份运行&#xff1a; 勾选 Agree with CapCut Users License Agreement & Pricacy Policy 点击 Mor…

基于SSM的哈米音乐实战项目,Java课程设计作业,Java毕业设计项目,找工作前的实战项目,附部分源码以及数据库

1、项目所需技术 java基础&#xff0c;java反射&#xff0c;泛型html&#xff0c;css&#xff0c;JavaScript&#xff0c;jquery&#xff0c;bootstrap&#xff0c;layuijstl&#xff0c;el表达式&#xff0c;jsp&#xff0c;mysql&#xff0c;jdbc&#xff0c;xml&#xff0c…

HashMap及其相关知识点

一、HashMap插入与删除 通过将key转换为hashCode&#xff08;int&#xff09;&#xff0c;通过hashCode计算下标&#xff0c;int index hashCode & (length - 1)&#xff0c;从而实现插入与删除。 二、Hash冲突 Java8之前&#xff1a;通过数组链表的数据结构解决hash冲…

【Java数据结构】Map和Set超详细两万字讲解(内含搜索树+哈希表)

&#x1f512;文章目录&#xff1a; 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2. Map和Set的基础概念 3.Map的基础使用 4.Set的基础使用 5. TreeMap的本质——红黑树 5.1二叉搜索树的概念 5.2二叉搜索树的模拟实现 二叉搜索树——查找 二…

东莞网页设计结构图

东莞网页设计结构图是一个网页设计师在设计网站时使用的工具&#xff0c;用来展示网页的布局、内容结构和功能模块等信息。在设计一个网页时&#xff0c;网页设计师通常会首先制作一个网页设计结构图&#xff0c;以便更好地组织和规划网站的内容和功能。东莞网页设计结构图可以…

PFA的特点及焊接方法和应用领域

一、PFA特点&#xff1a; 1、外观半透明&#xff0c;易观察试剂情况&#xff1b; 2、耐高低温&#xff1a;-200&#xff5e;260℃&#xff1b; 3、耐腐蚀&#xff1a;耐强酸、强碱、王水、HF和各种有机溶剂&#xff1b; 4、防污染&#xff1a;本底值低&#xff0c;金属元素…

SpringBoot 整合 Spring Security 、JWT 实现认证、权限控制

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 Spring Security 和 JWT 实现认证、权限控制是一种在Web应用中保障安全的重要手段。 Spring Security是一个功能强大的身份验证和访问控制框架&#xff0c;它提供了完善的认证机制和方法级的授权功能。…

手机维修--学习笔记(一)

最近觉得手机主板维修比较有意思&#xff0c;观看许多师傅的维修视频&#xff0c;并做笔记如下&#xff1a; 手机主板维修&#xff1a; 【手机电路板怎么修&#xff0c;师傅对着电路图一步一步讲解&#xff0c;看完受益匪浅】https://www.bilibili.com/video/BV13A411v7wL?v…

梯度和反向传播

一.梯度 在机器学习的时候都了解过了&#xff0c;梯度是一个向量&#xff0c;导数变化最快的方向 损失函数&#xff1a; 通过梯度使损失降到最 用ywxb举例也就是使用梯度来更新w的值&#xff0c;ww-学习率*梯度。大于零就减小&#xff0c;反之增大 二.反向传播 就比如搭积木…

【源码+文档+调试讲解】古风生活体验交流网站

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

24/8/5算法笔记 逻辑回归sigmoid

今日是代码对sigmoid函数的实现和运用 #linear_model线性回归 #名字虽然叫逻辑回归&#xff0c;作用于分类 #分类&#xff1a;类别 #回归&#xff1a;预测 from sklearn.linear_model import LogisticRegression 实现函数 import numpy as np import matplotlib.pyplot as pl…