Spring5

一、Spring 框架概述

1、概述

Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。

  • Spring 是轻量级的开源的 JavaEE 框架
  • Spring 可以解决企业应用开发的复杂性
  • Spring 有两个核心部分:IOC 和 Aop
    (1)IOC:控制反转,将对象的创建权交给 Spring 去创建。
    (2)Aop:面向切面,不修改源代码进行功能增强。
  • IOC中依赖注入:DI——Dependency Injection,是指依赖的对象不需要手动调用 setXX 方法去设置,而是通过配置赋值。

.
.

① 三层架构

  • A 表现层 web层 MVC是表现层的一个设计模型
  • B 业务层 service层
  • C 持久层 dao层

.
.

② 特点
在这里插入图片描述

.
.
.

二、Spring 体系结构

Spring 有可能成为所有企业应用程序的一站式服务点,然而,Spring 是模块化的,允许你挑选和选择适用于你的模块,不必要把剩余部分也引入。

.
.

1、体系结构

  • Spring 框架提供约 20 个模块,可以根据应用程序的要求来使用。
    在这里插入图片描述

.
.

2、核心容器

核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring 表达式语言,Spring Expression Language)等模块组成。

  • spring-core 模块提供了框架的基本组成部分,包括 IoC 和依赖注入功能

  • spring-beans 模块提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。

  • context 模块建立在由 core和 beans 模块的基础上建立起来的,它以一种类似于 JNDI 注册的方式访问对象。Context 模块继承自Bean 模块,并且添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过 Servelet 容器)等功能。Context模块也支持 Java EE 的功能,比如 EJB、JMX 和远程调用等。ApplicationContext 接口是 Context 模块的焦点spring-context-support 提供了对第三方集成到 Spring 上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。

  • spring-expression 模块提供了强大的表达式语言,用于在运行时查询和操作对象图。它是 JSP2.1 规范中定义的统一表达式语言的扩展,支持 set 和 get 属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从 Spring IoC 容器检索对象,还支持列表的投影、选择以及聚合等。

.

它们的完整依赖关系如下图所示:
在这里插入图片描述

.
.

3、数据访问/集成

数据访问/集成层包括 JDBCORMOXMJMS事务处理模块
(注:JDBC=Java Data Base Connectivity,ORM=Object Relational Mapping,OXM=Object XML Mapping,JMS=Java Message Service)

  • JDBC 模块提供了 JDBC 抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。

  • ORM 模块提供了对流行的对象关系映射 API 的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 spring的其它功能整合,比如前面提及的事务管理。

  • OXM 模块提供了对 OXM 实现的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等。

  • JMS 模块包含生产(produce)和消费(consume)消息的功能。从 Spring 4.1 开始,集成了 spring-messaging 模块。

  • 事务 模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。(注:编程式事务需要自己写 beginTransaction()、commit()、rollback() 等事务管理方法,声明式事务是通过注解或配置由 spring 自动处理,编程式事务粒度更细)

.
.

4、Web

Web 层由 WebWeb-MVCWeb-SocketWeb-Portlet 组成

  • Web 模块提供面向 web 的基本功能和面向 web 的应用上下文,比如多部分(multipart)文件上传功能、使用 Servlet 监听器初始化 IoC 容器等。它还包括 HTTP 客户端以及 Spring 远程调用中与 web 相关的部分。

  • Web-MVC 模块为 web 应用提供了模型视图控制(MVC)和 REST Web服务的实现。Spring 的 MVC 框架可以使领域模型代码和 web 表单完全地分离,且可以与 Spring 框架的其它所有功能进行集成。

  • Web-Socket 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。

  • Web-Portlet 模块提供了用于 Portlet 环境的 MVC 实现,并反映了 spring-webmvc 模块的功能。

.
.

5、Test模块

Test 模块:Spring 支持 Junit 和 TestNG 测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。

.
.

6、其他

还有其他一些重要的模块,像 AOP,Aspects,Instrumentation,Web 和测试模块

  • AOP 模块提供了面向方面(切面)的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,从而使实现功能的代码彻底的解耦出来。使用源码级的元数据,可以用类似于.Net属性的方式合并行为信息到代码中。

  • Aspects 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。

  • Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。

  • Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。

  • 测试 模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。

.
.
.

三、IOC

1、IOC(概念和原理)

① 概念

  • IOC容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。

  • IOC 容器具有依赖注入功能的容器,它可以创建对象,IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。在Spring中BeanFactory是IOC容器的实际代表者

  • 通过阅读配置元数据提供的指令,容器知道对哪些对象进行实例化,配置和组装配置元数据可以通过 XML,Java 注释或 Java 代码来表示。
    在这里插入图片描述

  • 使用 IOC 目的:为了耦合度降低

.

② 底层原理
IOC底层原理是基于:xml 解析、工厂模式、反射

在这里插入图片描述
.
.

2、IOC(BeanFactory 接口)

IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂

① BeanFactory 容器

  • IOC 容器基本实现,是 Spring 内部的使用接口,它主要的功能是为依赖注入 (DI) 提供支持,这个容器接口在 org.springframework.beans.factory.BeanFactory中被定义
  • 特点: 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象

.

② ApplicationContext 容器
Application Context 是 BeanFactory 的子接口,也被称为 Spring 上下文。

  • ApplicationContext 是 spring 中较高级的容器,提供更多更强大的功能。和 BeanFactory 类似,它可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean。 另外,它增加了企业所需要的功能,比如,从属性文件中解析文本信息和将事件传递给所指定的监听器。这个容器在 org.springframework.context.ApplicationContext interface 接口中定义。
  • 特点:加载配置文件时候就会把在配置文件对象进行创建

最常被使用的 ApplicationContext 接口实现:

  • FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径
  • ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。
  • WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。
    在这里插入图片描述

.
.

3、Bean 定义

  • 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。
  • 这些 bean 是由用容器提供的配置元数据创建的

① 配置元数据 bean 定义的属性介绍:
在这里插入图片描述

.

② Bean 与 Spring 容器的关系
在这里插入图片描述

.
.

4、IOC 操作 Bean 管理(概念)

① 什么是 Bean 管理(两个操作)

  • Spring 创建对象
  • Spirng 注入属性(依赖注入)

.

② Bean 管理操作三个重要的方法

  • 基于 XML 的配置文件
  • 基于注解的配置
  • 基于 Java 的配置

.
.

4-1、IOC 操作 Bean 管理(基于 xml 方式)

① 基于 xml 方式创建对象

  • 在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建
  • 在 bean 标签有很多属性,介绍常用的属性
    id 属性:唯一标识
    class 属性:类全路径(包类路径)
  • 注意:创建对象时候,默认也是执行无参数构造方法完成对象创建
    在这里插入图片描述

.

② 基于 xml 方式 基本依赖注入(DI)

第一种:使用 set 方法进行注入

  • (1) 创建类,定义属性和对应的 set 方法
    在这里插入图片描述

  • (2) 在 spring 配置文件配置对象创建,配置属性注入
    在这里插入图片描述

.

第二种:使用有参数构造进行注入

  • (1) 创建类,定义属性,创建属性对应有参数构造方法
    在这里插入图片描述
  • (2) 在 spring 配置文件中进行配置
    在这里插入图片描述
    .

第三种:p 名称空间注入(了解)

  • (1) 添加 p 名称空间在配置文件中的约束
    在这里插入图片描述
  • (2) 进行属性注入,在 bean 标签里面进行操作
    在这里插入图片描述

.
.

③ 基于 xml 方式 其他依赖注入(注入其他类型属性)

字面量(属性值)

  • (1) 设置为 null
    在这里插入图片描述
  • (2) 属性值包含特殊符号
    在这里插入图片描述

.

注入属性-外部 bean
在这里插入图片描述

.

注入属性-内部 bean
在这里插入图片描述

.

注入属性-级联赋值

  • (1) 方法一:
    在这里插入图片描述
  • (2) 方法二:前提要设置属性的get方法
    在这里插入图片描述

.
.

④ 基于 xml 方式 集合依赖注入(注入集合属性)

如果想传递多个值,如 Java Collection 类型 List、Set、Map 和 Properties。为了处理这种情况,Spring 提供了四种类型的集合的配置元素,如下所示:
在这里插入图片描述
两种情况

  • a 传递集合中直接的值
  • b 传递一个 bean 的引用作为集合的元素。

.

注入数组类型属性
在这里插入图片描述

.

注入 List 集合类型属性
在这里插入图片描述

.

注入 Map 集合类型属性
在这里插入图片描述

.

注入 Set 集合类型属性
在这里插入图片描述

.

注入 Properties 集合类型属性
在这里插入图片描述

.

注入 Bean 引用(集合中的值为引用数据类型)

  • 方式一:外部bean
    在这里插入图片描述

  • 方式二:内部bean
    在这里插入图片描述

.

集合注入部分提取出来(多次使用)

  • (1)在 spring 配置文件中引入名称空间 util
    在这里插入图片描述

  • (2)使用 util 标签完成 list 集合注入提取(使用的是外部bean的方式演示,也可以用内部bean
    在这里插入图片描述

.
.

5、IOC 操作 Bean 管理(FactoryBean)

Spring 中为我们提供了两种类型的 bean,一种就是普通的 bean,我们通过 getBean(id) 方法获得是该 bean 的实际类型,另外还有一种 bean 是 FactoryBean,也就是工厂 bean,我们通过 getBean(id) 获得是该工厂所产生的 Bean 的实例,而不是该 FactoryBean 的实例

.

① FactoryBean 的创建

  • (1) 创建类,让这个类作为工厂 bean,实现接口 FactoryBean 并添加泛型(该泛型会指明 getObject() 返回类型
  • (2) 实现接口里面的方法,在 getObject() 方法中定义返回的 bean 的类型
    在这里插入图片描述

FactoryBean 接口的三个方法:

  • T getObject()
  • Class<?> getObjectType()
  • boolean isSingleton()

.

② FactoryBean和普通Bean的区别

  • 普通 bean:在配置文件中定义 bean 类型就是返回类型
  • 工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样(返回 getObject() 方法中的类型

.
.

6、IOC 操作 Bean 管理(bean 作用域)

在 Spring 里面,默认情况下,bean 是单实例对象
在这里插入图片描述

.

① 设置bean作用域

  • 在 spring 配置文件 bean 标签里面 scope 属性用于设置作用域
  • Spring 框架支持以下五个作用域,分别为 singleton、prototype、request、session 和 global session
    在这里插入图片描述

.

② 常用bean作用域

  • Singleton 是单例类型,就是在创建起容器时就同时自动创建了一个 bean 的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,Singleton 作用域是 Spring 中的缺省作用域
  • prototype 表示一个 bean 定义对应多个对象实例它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象

.
.

7、IOC 操作 Bean 管理(bean 生命周期)

① bean 生命周期

  • (1)通过构造器创建 bean 实例(无参数构造)
  • (2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
  • (3)调用 bean 的初始化的方法(需要进行配置初始化的方法)
    配置文件中 bean 标签的 init-method 属性指定一个方法,在实例化 bean 时,立即调用该方法。
  • (4)bean 可以使用了(对象获取到了)
  • (5)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
    配置文件中 bean 标签的 destroy-method 属性指定一个方法,只有从容器中移除 bean 之后,才能调用该方法。

.

② bean生命周期代码演示

  • bean的代码
    在这里插入图片描述

  • XML中的配置
    在这里插入图片描述

  • 测试代码
    在这里插入图片描述

  • 打印语句
    在这里插入图片描述

.

③ Bean 后置处理器(BeanPostProcessor接口)

  • 作用:允许在调用初始化方法前后对 Bean 进行额外的处理

  • BeanPostProcessor ​接口定义回调方法,你可以实现该方法来提供自己的实例化逻辑,依赖解析逻辑等。你也可以在 ​Spring​ 容器通过插入一个或多个 ​BeanPostProcessor​ 的实现来完成实例化。配置和初始化一个​bean​之后实现一些自定义逻辑回调方法。

  • 执行顺序:通过增加实现​ Ordered ​接口提供的​ order​ 属性来控制这些​ BeanPostProcessor​ 接口的执行顺序

  • 注意
    一、​ApplicationContext​ 会自动检测由 ​BeanPostProcessor​ 接口的实现定义的 ​bean​,注册这些​ bean​ 为后置处理器,然后通过在容器中创建​ bean​,在适当的时候调用它。
    二、要实现的两个抽象方法: ​BeanPostProcessor.postProcessBeforeInitialization(Object, String)​BeanPostProcessor.postProcessAfterInitialization(Object, String)​注意命名要准确

  • 使用步骤
    一、创建类并继承 BeanPostProcessor 接口且重写两个方法
    在这里插入图片描述
    二、XML中配置bean
    在这里插入图片描述

.
.

8、IOC 操作 Bean 管理(xml 自动装配)

Spring 容器可以在不使用<constructor-arg>和<property> 元素的情况下自动装配相互协作的 bean 之间的关系,这有助于减少编写一个大的基于 Spring 的应用程序的 XML 配置的数量。

① 使用<bean>元素的 autowire 属性为一个 bean 定义指定自动装配模式
在这里插入图片描述

  • 可以使用 byType 或者 constructor 自动装配模式来连接数组和其他类型的集合

  • 常用的自动装配属性 byName 和 byType

.
.

9、IOC 操作 Bean 管理(引入外部属性文件)

① 引入 context 名称空间约束
在这里插入图片描述
.

② 在 spring 配置文件使用标签引入外部属性文件
在这里插入图片描述
.

③ 使用方法 —> ${键}
在这里插入图片描述

.
.

10、Spring 基于注解的配置

从 Spring 2.5 开始就可以使用注解来配置依赖注入。而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身。

① 引入依赖
在这里插入图片描述

.

② 注解连线在默认情况下在 Spring 容器中不打开。因此,在可以使用基于注解的连线之前,我们将需要在我们的 Spring 配置文件中启用它

  • 在这里插入图片描述

.

③ 开启组件扫描细节配置

  • 在这里插入图片描述
  • 在这里插入图片描述

.

④ 基于注解方式实现创建对象

  • (1)@Component(value="") :泛指各种组件
  • (2)@Service(value=""):业务层
  • (3)@Controller(value=""):控制层
  • (4)@Repository(value=""):数据访问层
  • 上面四个注解功能是一样的,都可以用来创建 bean 实例
  • value的值对应bean标签的id,如果没写默认类名的驼峰命名法

.

⑤ 基于注解方式实现属性注入

  • @Autowired:根据属性类型进行自动装配。可以作用在变量、setter方法、构造函数上;
    注意:在有多个相同类型(子父类/接口实现类),使用按类型注入,此时按照名称进行二次筛选,选中与被注入对象相同名称的对象进行注入。没有就报错
    在这里插入图片描述

  • @Qualifier:根据名称进行注入。注意:需和@Autowired 一起使用

  • @Resource:可以根据类型注入,可以根据名称注入

  • @Primary:让spring进行自动装配的时候,默认使用首选的bean,和@Qualifier一个效果。

  • @Value:注入普通类型属性

.

⑥ 完全注解开发

① 创建配置类

  • @Configuration:表示这个类是 spring 的配置类,相当于 spring 的 xml文件!
    在这里插入图片描述
  • 根据配置类创建IOC容器对象
    在这里插入图片描述

.

② 在配置类中配置bean

  • @Bean 注解相当于 XML 配置文件中的 bean 标签
    在这里插入图片描述

.

③ 在配置类中配置自动扫描的包

  • @ComponentScan:在配置类中配置自动扫描的包
    在这里插入图片描述

.
.
.

四、AOP

依赖注入帮助你对应用程序对象相互解耦合,AOP 可以帮助你从它们所影响的对象中对横切关注点解耦
横切关注点:从每个方法中抽取出来的同一类非核心业务。

1、简介

Spring 框架的一个关键组件是面向切面的编程(AOP)框架。面向切面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑

① 通俗的说:

  • 利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
  • Spring AOP 模块提供拦截器来拦截一个应用程序,例如,当执行一个方法时,你可以在方法执行之前或之后添加额外的功能。
  • 在 OOP 中,关键单元模块度是,而在 AOP 中单元模块度是切面
  • 通俗描述:不通过修改源代码方式,在主干功能里面添加新功能
  • 使用登录例子说明 AOP
    在这里插入图片描述

.

② AOC 核心套路
在这里插入图片描述

.
.

2、AOP(底层原理)

实现原理AOP 框架负责动态地生成 AOP 代理类,这个代理类的方法则由 Advice和回调目标对象的方法所组成, 并将该对象可作为目标对象使用。

.

① 实现AOP的技术,主要分为两大类:

  • 一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
  • 二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间 织入有关“方面”的代码。

.

② 底层原理
在这里插入图片描述

  • 有接口情况,使用 JDK 动态代理
    创建接口实现类代理对象,增强类的方法
  • 没有接口情况,使用 CGLIB 动态代理
    创建子类的代理对象,增强类的方法

.
.

3、AOP 术语

在这里插入图片描述
在这里插入图片描述

.

① 常用的4个术语

  • 连接点(Join point)
    在这里插入图片描述
  • 切入点(Pointcut)
    在这里插入图片描述
  • 通知/增强(Advice)
    在这里插入图片描述
  • 切面(Aspect)
    在这里插入图片描述

.

② 通知的类型
在这里插入图片描述

.

③ 实现自定义方面
在这里插入图片描述

.
.

4、AOP 操作(准备工作)

① AspectJ

  • Spring 框架一般都是基于 AspectJ 实现 AOP 操作
  • AspectJ 不是 Spring 组成部分,独立 AOP 框架,一般把 AspectJ 和 Spirng 框架一起使用,进行 AOP 操作

.

② 在项目工程里面引入 AOP 相关依赖
在这里插入图片描述

.

③ 切入点表达式

  • 作用:知道对哪个类里面的哪个方法进行增强
  • 语法结构execution([权限修饰符] [返回类型] [类全路径] [方法名称]([参数列表])
    在这里插入图片描述
    在这里插入图片描述

.
.

4-1、AOP 操作(AspectJ 注解)

① 创建类,在类里面定义方法
在这里插入图片描述

.

② 开启生成代理对象和开启注解扫描

  • XML中配置文件方式开启在这里插入图片描述
  • 注解方式开启
    在这里插入图片描述

③ 创建增强类(编写增强逻辑)添加注解 @Aspect

  • 在增强类里面,创建方法,不同的注解代表不同通知类型
    在这里插入图片描述

注意:
a:使用环绕通知 要添加一个参数 ProceedingJoinPoint p
b:并且在环绕通知中需要明确调用 ProceedingJoinPoint 的 proceed() 方法来执行被代理的方法。如果忘记这样做就会导致通知被执行了, 但目标方法没有被执行。
c:如果目标方法有返回值,环绕通知的方法也需要返回目标方法执行之后的结果, 即调用 joinPoint.proceed(); 的返回值, 否则会出现空指针异常

.

④ 相同的切入点抽取
在这里插入图片描述

.

⑤ 有多个增强类多同一个方法进行增强,设置增强类优先级

  • 在增强类上面添加注解 @Order(数字类型值),数字类型值越小优先级越高
    在这里插入图片描述

.
.

4-2、AOP 操作(AspectJ 配置文件)

① 创建两个类,增强类被增强类,创建方法
在这里插入图片描述
.

② 在 spring 配置文件中创建两个类对象
在这里插入图片描述

.

③ 在 spring 配置文件中配置切入点
在这里插入图片描述

.
.
.

五、JdbcTemplate

1、JdbcTemplate(概念和准备)

Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作

  • Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常,处理事务,到最后关闭连接。
  • Spring JDBC 提供几种方法和数据库中相应的不同的类与接口。我将给出使用 JdbcTemplate 类框架的经典和最受欢迎的方法。这是管理所有数据库通信和异常处理的中央框架类
  • JdbcTemplate 类执行 SQL 查询、更新语句和存储过程调用,执行迭代结果集和提取返回参数值。
  • JdbcTemplate 类的实例是线程安全配置的。所以你可以配置 JdbcTemplate 的单个实例,然后将这个共享的引用安全地注入到多个 DAOs 中

.
.

① 导入jar
在这里插入图片描述

.

② 配置数据源(数据库连接池)
在这里插入图片描述
在这里插入图片描述

.

③ 配置 JdbcTemplate 对象,注入 数据源(dataSource)
在这里插入图片描述
在这里插入图片描述

.

④ 在使用到的DAO中注入 JdbcTemplate
在这里插入图片描述

.

⑤ 修改方法
在这里插入图片描述

  • 添加一条数据
    在这里插入图片描述

  • 修改一条数据
    在这里插入图片描述

.

⑥ 查询方法

  • 查询特殊值(例如:返回总记录条数...)
    在这里插入图片描述
    在这里插入图片描述

  • 查询单个对象
    在这里插入图片描述
    在这里插入图片描述

  • 查询集合
    在这里插入图片描述
    在这里插入图片描述

.

⑦ 批量操作
在这里插入图片描述
第一个参数:sql语句
第二个参数:每一个Object[]是一组占位符,数组中参数的存放位置要与占位符的先后顺序一致。

  • 批量添加
    在这里插入图片描述

  • 批量修改
    在这里插入图片描述

  • 批量删除
    在这里插入图片描述

.
.

2、Spring 声明式事务管理

① 什么事务

  • 一个数据库事务是一个被视为单一的工作单元的操作序列这些操作应该要么完整地执行,要么完全不执行

.

② 事务四个特性(ACID)

  • 原子性:事务应该当作一个单独单元的操作,这意味着整个序列操作要么是成功,要么是失败的。

  • 一致性:这表示数据库的引用完整性的一致性,表中唯一的主键等。

  • 隔离性:可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。

  • 持久性:一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删除。

.

③ Spring 事务管理介绍
事务通常添加到 JavaEE 三层结构里面 Service 层(业务逻辑层)

  • 在 Spring 进行事务管理操作两种方式:编程式事务管理和声明式事务管理(使用)

Spring 支持两种类型的事务管理:

  • 编程式事务管理 :这意味着你在编程的帮助下有管理事务。这给了你极大的灵活性,但却很难维护。
  • 声明式事务管理 :这意味着你从业务代码中分离事务管理。你仅仅使用注释或 XML 配置来管理事务
    声明式事务管理比编程式事务管理更可取,尽管它不如编程式事务管理灵活,但它允许你通过代码控制事务。但作为一种横切关注点,声明式事务管理可以使用 AOP 方法进行模块化。Spring 支持使用 Spring AOP 框架的声明式事务管理。底层使用 AOP 原理

.

④ Spring 事务管理 API
在这里插入图片描述

.

⑤ Spring 事务抽象
Spring事务管理的五大属性:隔离级别传播行为是否只读事务超时回滚规则
Spring 事务抽象的关键是由 org.springframework.transaction.PlatformTransactionManager 接口定义

  • @Transactional 注解的参数中对应的配置
    在这里插入图片描述

  • 事务的传播:简单的理解就是多个事务方法相互调用时,事务如何在这些方法间传播。
    Spring事务传播类型枚举Propagation
    在Spring中对于事务的传播行为定义了七种类型
    在这里插入图片描述

  • 事务的隔离级别:事务隔离级别指的是一个事务对数据的修改与另一个并行的事务的隔离程度,当多个事务同时访问相同数据时,如果没有采取必要的隔离机制,就可能发生以下问题:
    在这里插入图片描述

  • Spring支持的**事务隔离级别**
    在这里插入图片描述

  • timeout:超时时间
    (1)事务需要在一定时间内进行提交,如果不提交进行回滚
    (2)默认值是 -1 ,设置时间以秒单位进行计算

  • readOnly:是否只读
    (1)读:查询操作,写:添加修改删除操作
    (2)readOnly 默认值 false,表示可以查询,可以添加修改删除操作
    (3)设置 readOnly 值是 true,设置成 true 之后,只能查询

  • rollbackFor:回滚
    (1)设置出现哪些异常进行事务回滚

  • noRollbackFor:不回滚
    (1)设置出现哪些异常不进行事务回滚

.
.

⑥ 基于注解方式:声明式事务管理

A、操作步骤

  • 配置数据源
    在这里插入图片描述

  • 配置JdbcTemplate
    在这里插入图片描述

  • 配置事务管理
    在这里插入图片描述

  • 开启事务注解
    在这里插入图片描述

  • 在 service 类上面(或者 service 类里面方法上面)添加事务注解
    (1)@Transactional,这个注解添加到上面,也可以添加方法上面。
    (2)如果注解添加类上面,这个类里面所有的方法都添加事务
    (3)如果注解添加方法上面,为这一个方法添加事务
    在这里插入图片描述

  • @Bean 注解的注入依赖方式在方法的形参添加需要注入的数据类型,使用该形参即可。(Spring会从BeanFactory中寻找相同类型的Bean并赋值,和自动注入一样)。

.

⑦ 基于XML方式:声明式事务管理

  • 添加tx、text、aop名称空间
    在这里插入图片描述
  • 配置事务管理器
    在这里插入图片描述
  • 配置通知
    在这里插入图片描述
  • 配置切入点和切面
    在这里插入图片描述

.
.
.

六、Spring5新特性

整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9许多不建议使用的类和方法在代码库中删除

1、常用的几个新特性

① Spring 5.0 框架自带了通用的日志封装
(1)Spring5 已经移除 Log4jConfigListener,官方建议使用 Log4j2
(2)Spring5 框架整合 Log4j2

  • 第一步 引入 jar 包
    在这里插入图片描述

  • 第二步 创建 log4j2.xml 配置文件
    在这里插入图片描述

.

② Spring5 框架核心容器支持@Nullable 注解
@Nullable 注解可以使用在方法上面,属性上面,参数上面,表示方法返回可以为空属性值可以为空参数值可以为空

  • 注解用在方法上面,方法返回值可以为空
    在这里插入图片描述
  • 注解使用在方法参数里面,方法参数可以为空
    在这里插入图片描述
  • 注解使用在属性上面,属性值可以为空
    在这里插入图片描述

.

③ Spring5 核心容器支持函数式风格 GenericApplicationContext
在这里插入图片描述

.

④ Spring5 整合 JUnit4

  • 第一步 引入 Spring 相关针对测试依赖
    在这里插入图片描述
  • 第二步 创建测试类,使用注解方式完成(注解写在类上边)
    在这里插入图片描述

⑤ Spring5 支持整合 JUnit5

  • 第一步 引入 JUnit5 的 jar 包
    在这里插入图片描述
    在这里插入图片描述

  • 第二步 创建测试类,使用注解完成
    在这里插入图片描述

  • 使用一个复合注解替代上面两个注解完成整合
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值