Spring

注:没有反射就没有框架,IOC (控制反转,即创建对象的过程由Spring做,不用自己new)底层就是反射

学习顺序

在这里插入图片描述

0. 反射

旨在完成:在不修改源码的情况下,通过外部程序配置来修改文件
eg. 给了re.properties,里面写着:
classfullpath=com.hsp.edu.Cat
method=hi
要求你new出一个对应对象并调用相应方法

通过string获取真正的class

1. IOC

把创建对象和对象之间的调用过程,交给spring

1.1 底层实现:xml解析+工厂模式+反射

在这里插入图片描述

在这里插入图片描述

由上可知,IOC本质上就是一个工厂

1.2 IOC容器

1.1节只是说明了IOC原理,本节介绍真正开发中如何使用封装后的IOC工厂模式,即IOC容器

IOC容器底层就是对象工厂

在这里插入图片描述
这两个接口有各种实现类

使用举例:
在这里插入图片描述

在这里插入图片描述

1.3 IOC操作Bean管理

Bean管理分为两个部分:Bean创建与属性注入

Bean管理有两种方式:基于XML的和基于注释的

1.3.1 IOC基于xml方式对Bean进行管理

(1)常规情况

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

在这里插入图片描述

(2)特殊值的处理:
在这里插入图片描述
(3)bean注入属性时,注入的属性是另一个对象(外部Bean)

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

在这里插入图片描述
(4)bean注入属性时,注入的属性是内部Bean和级联赋值

一对多关系:一个员工从属一个部门,一个部门内有多个员工,即员工类中有个部门类作为员工的属性
(类嵌套类,就涉及到对里层类的属性赋值)

内部Bean

在这里插入图片描述

级联赋值:

在这里插入图片描述
(5)xml注入集合属性

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(6)单实例与多实例

Spring里面默认Bean是单实例对象,即在代码中反复取bean出来,发现对象编号是一样的

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

(7)Bean的生命周期

在这里插入图片描述
(8)自动注入属性

在这里插入图片描述

根据name自动装配

在这里插入图片描述
根据类型自动装配
在这里插入图片描述

在bean定义中找到相应对象

(9)将外部文件的内容作为属性值注入

外部文件内容:
在这里插入图片描述

xml文件修改部分:
在这里插入图片描述
修改部分的作用:
xmlns:context 是一个用于声明 Spring 的 context 命名空间的前缀,在声明了 context 命名空间后,可以使用 context:xxx 标签来配置与应用程序上下文和依赖注入相关的功能。在这里插入图片描述

1.3.2 IOC基于注解方式对Bean进行管理

简化xml配置
AOP依赖、开启扫描

1.3.2.1 创建对象

四种注解创建对象:
(1)@Component:web层,确定不了事哪一个层的时候使用
(2)@Controller:控制层,就是我们的action层
(3)@Service:业务逻辑层,就是我们的service或者manager层
(4)@Repository:持久层,就是我们常说的dao层

XML文件:
在这里插入图片描述
具体类:
在这里插入图片描述
使用时先加载XML配置文件,读取到要求以注解方式管理bean:

在这里插入图片描述

注:组件扫描时也可设置哪些注释解析,哪些注释不解析
在这里插入图片描述
在这里插入图片描述

1.3.2.2 注入属性

三种注解可以实现属性注入:
(1)@Autowired:根据属性类型自动装配
在这里插入图片描述

(2)@Qualifier:根据名称自动装配

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

(3)@Resource:可根据类型可根据名称
在这里插入图片描述

上面三个都是注入对象属性

(4)@Value:为基本数据类型注入属性
在这里插入图片描述

纯注解开发,不需要xml配置文件
其实spring boot就是做到了这个

在这里插入图片描述

2. AOP

降低业务耦合度,开发方便
不通过修改源代码方式,在主干功能里面添加新功能

业务与业务之间隔离,各自开发。如需在主干业务上添加新业务,通过配置的方式结合二者即可

2.1 AOP 底层原理

对一个业务中的某个方法进行增强,在不修改源码的情况下新增业务
使用动态代理实现,有两种情况使用动态代理

(1)有接口 使用JDK动态代理

目标:为一个 接口实现类(UserDaoImpl) 创建代理对象

在这里插入图片描述
代码举例:
使用Proxy创建代理对象

在这里插入图片描述
方法中有三个参数:

  • 类加载器
  • 待增强方法所在的类,这个类实现的接口(可能是多个接口,所以是数组)
  • 实现这个接口InvocationHandler,创建代理对象,写 增强的部分

前置准备:

在这里插入图片描述

创建代理对象UserDaoProxy:

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

调用:

在这里插入图片描述

(2)没有接口 使用CGLIB

在这里插入图片描述

2.2 术语

(1)连接点
(2)切入点
(3)通知(增强)
(4)切面 (把权限判断这个功能加入到用户登录业务中,这个过程叫切面)
在这里插入图片描述

2.3 具体实现

(1)AspectJ依赖
在这里插入图片描述

(2)切入点表达式:指明要对哪个类里的哪个方法做增强

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

2.3.1 注解实现

在这里插入图片描述

在这里插入图片描述
进行通知的配置

(1)创建配置文件

在这里插入图片描述
(2)利用注解创建对象

@Component
在这里插入图片描述

(3)在增强类上加注解@Aspect

在这里插入图片描述
(4)在配置文件中开启Aspect J

在这里插入图片描述
(5)设置增强类的位置

5种通知类型+切入点表达式

在这里插入图片描述
效果:
在这里插入图片描述

此时调用user add()方法,调用的是增强后的方法。
user Proxy单方面挂上user

注:重用切入点

在这里插入图片描述
一个方法有多个增强类,设置优先级@Order注解,值越小优先级越高

在这里插入图片描述

在这里插入图片描述

2.3.2 配置文件实现(了解)

在这里插入图片描述
切入点:被增强方法
切面:增强过程
在这里插入图片描述

在这里插入图片描述

3. JDBCTemplate

是Spring对JDBC的封装
关于Java中的JDBC,可参考此篇第四部分

先在配置文件中创建JDBCTemplate对象,然后再代码中引用这个对象
在这里插入图片描述

3.1增

调用JDBCTemplate中的update方法实现添加
BookDaoImpl设计(实现BookDao接口,一个跟数据库表完美对应的类):
在这里插入图片描述
实际调用通过Book Service:

在这里插入图片描述

3.2 删改

BookDaoImpl设计:
在这里插入图片描述

测试功能:

在这里插入图片描述

3.3 查

(1)查询返回单个值

在这里插入图片描述

通过Book Service调用测试:

在这里插入图片描述
(2)查询返回对象

eg.查询图书详情

依赖于这个函数:

在这里插入图片描述

BookDaoImpl:

在这里插入图片描述

Book Service:

在这里插入图片描述

(3)查询返回集合

eg.查询图书列表分页,set返回

依赖于这个函数:

在这里插入图片描述

BookDaoImpl:

在这里插入图片描述

Book Service:

在这里插入图片描述

3.4 批量增

核心方法:

在这里插入图片描述

BookDaoImpl:(返回影响行数)

在这里插入图片描述

Book Service:

在这里插入图片描述

3.5 批量改删

BookDaoImpl:

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

Book Service:

在这里插入图片描述

在这里插入图片描述

4. 事务

4.1 基本概念

在这里插入图片描述

4.2 基础功能实现

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

在这里插入图片描述

组件扫描引入注释

在这里插入图片描述
设置数据库连接池

在这里插入图片描述
Service里面注入DAO

在这里插入图片描述
DAO里面注入JDBC模板:

在这里插入图片描述
测试:

在这里插入图片描述

4.3 追加事务

4.3.1 配置文件(前置工作)

Spring中如何使用事务

在这里插入图片描述

配置文件:

在这里插入图片描述

开启事务注解:

增加命名空间且

在这里插入图片描述

在Service中增加事务注解

在这里插入图片描述

在这里插入图片描述

4.3.2 事务的参数(注解式管理)

在这里插入图片描述

(1)

在这里插入图片描述
(2)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)

在这里插入图片描述

4.3.3 XML管理事务

(1)配置文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上案例说明了事务的本质是AOP

4.3.4 完全注解开发

在这里插入图片描述

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

在这里插入图片描述
测试:
在这里插入图片描述

5. Spring5特性

整个框架基于Java8

5.1 JUnit

JUnit4

在这里插入图片描述

JUnit5

在这里插入图片描述
注释简化:

在这里插入图片描述

5.2 Webflux

基于Springboot,后续来补上

web开发模块

在这里插入图片描述

5.2.1 响应式编程

5.2.2 原理

5.2.3 基于注解式编程

5.2.4 基于函数式编程

6. 总结

  1. Ioc 控制反转:new对象这一过程交给Spring的Ioc容器来完成,这个容器本质上是一个对象工厂,底层是通过反射实现的

  2. DI 依赖注入:一个对象的创建包含另一个对象,即一个类的属性里有另一个类,这种嵌套方式就叫dependency injection

  3. Ioc/DI 实现步骤:
    (1)写配置文件
    (2)创建Ioc容器,四种,ClassPathXmlApplicationContext等
    (3)获取bean,然后使用你想要的方法

  4. AOP面向切面编程:功能解耦,追加新功能。通过代理模式(23种设计模式之一)来实现:将非核心的代码交给代理(中介)做,然后代理去调用用户真正想要的核心代码。

  5. 两种代理:静态(对每个目标创建一个代理类)与动态(实际用,不用自己显式写,运行过程中动态生成)。动态代理有两种:JDK(要求目标类必须有接口,代理类和目标类实现同一个接口)和cglib(无需接口,直接根据目标类生成代理类)

  6. 声明式事务 spring-tx:通过注解或xml配置的方式来控制事务的提交和回滚,具体操作由框架干。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值