张红尘的博客 张红尘的博客

纵你阅人何其多,始终无人恰似我

目录
后端 | Spring入门(基于Spring4)
/      

后端 | Spring入门(基于Spring4)

Spring介绍

Spring核心主要两部分

(1)AOP: 面向切面编程,横向扩展功能,不改动原有代码。

(2)IOC: 控制反转。

  • 传统:创建类对象的过程,需要new出来对象
  • IOC:把对象的创建不是通过new方式实习,而是交给Spring配置创建类对象

Spring是一站式框架,在JavaEE三层结构中,每一层都提供不同的解决技术

  • 界面层(User Interface layer)(jsp)
  • 业务逻辑层(Business LogicLayer)(javaclass)
  • 数据访问层(Data access layer)(jdbc)

web层:SpringMVC

service层:Spring的ioc

dao层:Spring的jdbcTemplate

Spring的ioc操作

1.把对象的创建交给Spring进行管理

2.ioc 操作两部分:

(1)ioc的配置文件方式

(2)ioc 的注解方式

IOC底层原理

1.ioc底层原理使用技术

(1)XML

(2)dom4j解决XML

(3)工厂设计模式

(4)反射

2.画图分析IOC原理

New→工厂模式解耦→ioc

image.png

image.png

IOC入门案例

第一步 导入jar包
做spring最基本功能的时候,只需要导入4个核心jar包就可以了,导入支持日志输出的jar包
image.png

第二步 创建类,在类里面创建方法

image.png

第三步 创建Spring配置文件,配置创建类

(1)Spring 核心配置文件名称和位置不是固定的

建议放到src下面,官方建议applicationContext.xml

(2)引入schema约束

image.png

(3)配置对象

image.png

第四步 写代码测试对象创建
这段代码在测试中使用

image.png

Spring 的bean管理(xml方式)

Bean实例化的方式

在spring里面通过配置文件创建对象

bean实例化三种方式实现

第一种 使用类的无参数构造创建(重点)

类里面没有无参的构造方法,出现异常

image.png

第二种 使用静态工厂创建

创建静态的方法,返回类对象

image.png

image.png

第三种 使用实例工厂创建

创建不是静态的方法,返回类的对象

image.png

image.png

Bean标签常用属性

(1)Id属性: 起名称,id属性值任意命名

id的属性值,不能包含特殊符号

根据id值得到配置对象

(2)Class属性: 创建对象所在类的全路径

(3)Name属性: 功能和id属性一样的,id的属性值不能包含特殊符号,但是在name属性值里面可以包含特殊符号(不用了)

(4)Scope属性: Bean的作用范围

singleton默认值,单例
image.png
image.png

prototype 多例的

image.png
image.png

request创建对象把对象放到request域中

session 创建对象把对象放到session域中

globalSession 创建对象把对象放到globalSession域中

属性注入

1.创建对象时候,向类里面属性里面设置值

2.属性注入的方式介绍(三种方式)

  • (1)使用set方法注入
  • (2)使用有参数构造注入
  • (3)使用接口注入
    image.png

在spring框架里面,支持前两种方式

  • (1)set方法注入(重点)
  • (2)有参数构造注入

使用有参数构造注入属性

image.png

image.png

使用set方法注入属性(重点)

image.png
image.png

注入对象类型属性(重点)

创建service类和dao类具体实现过程

(1)在service里面把dao作为类型属性

(2)生成dao类型属性的set方法

image.png

(3)配置文件中注入关系

image.png

image.png

P名称空间注入

image.png

image.png

注入复杂类型属性

  • 数组
  • List集合
  • Map集合
  • Properties类型

image.png

IOC和DI区别

(1)IOC:控制反转,把对象创建交给Spring进行配置

(2)DI:依赖注入,向类里面的属性中设置值

(3)关系:IoC主要的实现方式有两种:依赖查找,依赖注入。依赖注入不能单独存在,需要ioc基础之上完成操作,它们是spring核心思想的不同方面的描述。

Spring整合web项目原理

  1. 加载Spring核心配置文件

image.png

  1. 实现思想:把加载配置文件和创建对象过程,在服务器启动时完成
  2. 实现原理
  • (1)ServletContext对象
  • (2)监听器
  • (3)具体使用
  1. 具体流程

在服务器启动时候,为每个项目创建一个ServletContext对象

在ServletContext对象创建时候,使用监听器可以具体到ServletContext对象在什么时候创建

使用监听器听到ServletContext对象创建时候,

加载Spring配置文件,把配置文件配置对象创建

把创建出来的对象放到ServletContext域对象里面(setAttribute方法)

获取对象时候,到ServletContext域得到(getAttribute方法)

Spring的bean管理(注解)

注解介绍

  1. 代码里面特殊标记,使用注解可以完成功能
  2. 注解写法@注解名称(属性名称=属性值)
  3. 注解使用在类上面,方法上面和属性上面

Spring注解开发准备

  1. 导入jar包

(1)导入基本jar包
image.png

image.png

image.png

image.png

image.png

(2)导入aop的jar包

image.png

  1. 创建类,创建方法
  2. 创建spring配置文件,引入约束

(1)第一次项目做ioc基本功能引入的约束是beans

(2)做spring的ioc注解开发,引入新的约束

image.png

  1. 开启注解扫描

image.png

注解创建对象

在创建对象的类上面使用注解实现

image.png

image.png

创建对象有四个注释

@Component:组件

@Controller:web层

@Service:业务层

@Repository:持久层

这四个注解功能是一样的,都创建对象,后续版本做扩展

创建对象单实例还是多实例

image.png

注解注入属性

创建service类,创建dao类,在service得到到对象

注入属性第一个注解@Autowired

(1)创建dao和service类

image.png

image.png

(2)在service类里面定义dao类型属性

image.png

注入属性第二个注解@Resource

image.png

配置文件和注解混合使用

  1. 创建对象操作使用配置文件方式实现

image.png

  1. 注入属性的操作使用注解方式实现(@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按** byName自动注入**罢了。)

image.png
spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。

AOP概念

AOP:面向切面(方面)编程,在不修改原本业务的前提下对方法进行增强

AOP采取横行抽取机制,取代了传统纵向继承体系重复性代码

AOP原理

画图分析原理

(Springboot2.X默认使用gclib模式,Springboot官方他们认为使用cglib更不容易出现转换错误)

image.png

image.png

image.png

AOP操作术语

Joinpoint(连接点): 类里面那些方法可以被增强,这些方法称为连接点,因为spring只支持方法类型的连接点。如:类开始初始化前、类初始化后、类的某个方法调用前、类的某个方法调用后、方法抛出异常后等。

Pointcut(切入点): 切点是指我们要对那些Joinpoint进行拦截,切点和连接点不是一对一的关系,一个切点可以匹配多个连接点。

Advice(通知/增强): 所谓通知是只拦截到Joinpoint 之后所要做的事情就是通知,通知分为

前置通知(Before)后置通知(After)返回通知(After-returning) 异常通知(After-throwing)环绕通知(Around)

Aspect(切面): 是切入点和通知(引介)的结合

Introduction(引介): 引介是一种特殊的通知在不修改类代码的前提下,Introduction可以在运行期为类动态的添加一些方法或Field

Target(目标对象): 代理的目标对象(要增强的类)

Weaving(织入): 是把增强应用到目标的过程。把advice应用到target的过程

Proxy(代理): 一个类被AOP织入增强后,就产生一个结果代理类

image.png

Spring的AOP操作

  1. 在Spring里面进行AOP操作,使用aspectj实现

(1)aspectj不是Spring一部分,和Spring一起使用进行aop操作

(2)Spring2.0以后新增了对AspectJ支持

  1. 使用Aspectj实习AOP有两种方式

(1)基于aspectj的xml配置

(2)基于aspectj的注解方式

AOP操作准备

  1. 除了导入最基本的jar包外,还需要导入AOP相关的jar包

image.png

aspectjweaver-1.8.13.jar文件在IDEA创建Spring项目中,没有,需要自己导入

image.png

  1. 创建Spring核心配置文件,导入AOP的约束

image.png

使用表达式配置切入点

  1. 切入点:实际增强的方法
  2. 常用的表达式

Execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)

(1)execution(*xyz.hcworld.aop.Book.add(..)) 代表可以是public或protected或private

(2)execution(*xyz.hcworld.aop.Book.*(..)) 对所有方法

(3)execution(**.*(..))全部类的全部方法

(4)execution(*save*(..)) 匹配所有save开头的方法
3. 通配符 *代表所有

Aspectj的aop操作

image.png

image.png

image.png

image.png

Log4j介绍(建议使用Log4j2,异步打印日志性能高)

  1. 通过log4j可以看到程序运行过程中更详细的信息,经常使用log4j查看日志
  2. 使用

(1)导入log4j的jar包

image.png

(2)负责log4j的配置文件复制到src下面

image.png

  1. 设置日志级别

image.png

(1)info:看到基本信息

(2)debug:可以看到更详细信息。

基于aspectj的注解AOP

第一步创建对象

image.png

第二步在Spring核心配置文件中,开启AOP

image.png

第三步在增强类上面使用注解完成AOP操作

image.png

Spring的事务管理

事务概念

1什么事务

事务包含一个或多个业务操作,这些操作要么都执行,要么都不执行。事务常被用来确保数据的一致性。

2事务特性

1. 原子性 (atomicity):强调事务的不可分割.
2. 一致性 (consistency):事务的执行的前后数据的完整性保持一致.
3. 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
4. 持久性(durability) :事务一旦结束,数据就持久到数据库

3不考虑隔离性产生读问题

1. 脏读 :一个事务读到了另一个事务的未提交的数据
2. 不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致.
3. 虚(幻)读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.

4解决读问题: 设置事务隔离级别(5种)

DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.

1. 未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生
2. 已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生
3. 可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生.
4. 串行化的 (serializable):避免以上所有读问题.

Mysql 默认:可重复读

Oracle 默认:读已提交

Spring事务管理API

1 Spring事务管理两种方式

第一种 编程式事务管理(一般不用)

第二种 声明式事务管理(主要)

(1)基于xml配置文件实现

(2)基于注解实现

2 Spring事务管理的API介绍

主要三个接口

PlatformTransactionManager

事务管理器

(1)spring针对不同的dao层框架,提供接口不同的实现类

org.springframework.jdbc.datasource.DataSourceTransactionManager

使用SpringJDBC或Mybatis进行持久化数据时使用

org.springframework.orm.hibernate5.HibernateTransactionManager

使用Hibernate5.0版本进行持久化数据时使用

(2)配置事务管理器

搭建转账环境

  1. 创建数据库表,添加数据

image.png

  1. 创建一个service和dao类,完成注入关系

image.png

(1)service层又叫业务逻辑层

(2)dao层,单纯对数据库操作层,在dao层不添加业务

(3)需求:小王转账1000给小马

  • 小王少1000
  • 小马多1000

image.png

image.png

  1. 产生问题:如果小王少了1000之后,出现异常,小马不会多1000,钱丢失了
  2. 解决: 添加事务解决,出现异常进行回滚操作

声明式事务管理(xml配置)

第一步 配置事物管理器

image.png

第二步 配置事务的增强

image.png

第三步配置切面

image.png

声明式事务管理(注解)

第一步 配置事务管理器

image.png

第二步 配置事务注解

image.png

第三步在使用事务的方法所在类上添加注解

image.png


标题:后端 | Spring入门(基于Spring4)
作者:张红尘
地址:https://www.hcworld.xyz/articles/2021/07/13/1626145565926.html