Spring的使用(下)

1.代理模式

为什么要使用代理模式?
因为代理模式就是SpringAOP和SpringMVC的底层。
代理模式的分类:
静态代理
动态代理

1.1 静态代理

角色分析:
抽象角色:一般使用接口或者抽象类解决,主要写完成什么事
真实角色:被代理的角色
代理角色:帮助真实角色完成某些事情,从中可以加独有的操作
客户:需要干这件事的用户

就比如我们生活中的租房子,抽象角色就是租房子这件事。真实角色就是房东。代理角色就是中介。而客户就是要租房子的人。

代码步骤:
1. 接口
在这里插入图片描述
2. 真实角色
在这里插入图片描述
3. 代理角色
在这里插入图片描述
4. 客户
在这里插入图片描述
加深理解
我们之前使用的userDao接口,如果使用了此实现类,如果在每一个方法上都添加一个日志,就得在每一个方法中添加代码,如果使用代理模式,我们直接将所需的这个类提取出来就可以做到这件事。
在这里插入图片描述
在这里插入图片描述

使用代理的目的就是为了在不修改原来代码的基础上,横向的增加自己的新功能,但是使用静态代理的缺点就是没产生一个代理,就要创建一个代理对象,这时我们的代码量就会翻倍,为了解决这个问题,我们引入了动态代理。

1.2 动态代理

  • 动态代理角色和静态代理角色相同。
    抽象角色,真实角色,代理角色,用户
  • 动态代理是生成好的,不是我们直接写好的。
  • 动态代理分为基于接口动态代理和基于类的动态代理
  • 我们在这里使用基于类的动态代理

动态代理类创建步骤:
1. 创建一个抽象角色
2. 创建一个真实对象
3. 创建动态的代理对象(继承InvocationHandler)
创建被代理接口
生成该接口的set方法
生成getProxy方法
生成invoke方法
添加自己的操作
4. 创建用户

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

2.AOP

什么是AOP?
AOP是面向切面编程,通过预编译的方式和运行期动态代理实现程序功能统一维护的技术,使用AOP可以将业务之间的逻辑分离,从而使业务逻辑各部分之间耦合度降低,提高程序的可重用性,增加开发效率。
AOP在spring中的作用?
提供声明式事务,允许用户自定义切面。

横切关注点:在哪个地方执行
切面:关注点被模块化成为一个对象
通知:执行什么方法,切面中的方法
其中有5中通知:
前置通知:方法前通知(MethodBeaforeAdvice)
后置通知:方法后通知(AfterReturnintAdvice)
环绕通知:方法前后(MethodInterception)
异常抛出通知:方法抛出异常通知(ThrowsAdvice)
引介通知:类中增加新方法或属性(IntroductionInterceptor)

	目标:被通知的对象(execution)

2.1 通过API接口使用

步骤:
1. 先创建接口
2. 创建接口实现类
3. 通过接口创建通知
4. 配置(ApplicationContext.xml)
5. 测试

  • 配置所需bean
  • 使用aop接口
  • 配置切点
  • 执行通知

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

2.2 使用自定义切面实现AOP【建议使用】

步骤:
1. 自定义切面
2. 配置ApplicationContext.xml
3. 测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 使用注解配置

步骤:
1. 创建一个类使用注解标记切面,切点
2. 开启使用注解配置
3. 测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.Spring整合Mybatis

导入相关的依赖jar包
在这里插入图片描述

3.1 第一种实现方式

首先创建一个applicationContext.xml
在其中用DriverManagerDataSource配置dataSource(就如之前在mybatis中配置的datasource一样)
然后通过SqlSessionFactoryBean创建sqlSessionFactory,用来创建sqlSession,并在其中配置mybatis的配置文件
在通过SqlSessionTemplate配置sqlsession并注入sqlSessionFactory
最后在配置mapp文件
在这里插入图片描述
简化之前的mybatis-config.xml的配置文件
在这里插入图片描述
之前的Mapper和Mapper.xml文件不变
添加了一个新的实现类
在这里插入图片描述
测试
在这里插入图片描述

3.2 通过继承SqlSessionDaoSupport实现

继承了SqlSessionDaoSupport就可以直接不用写sqlsession了,spring帮我们生成了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.声明式事务

什么是事务?
把一组操作绑定在一块,执行事要么都成功要么都失败。遵循着ACID原则。

如果没有开启事务,就算提交的业务中有错误,没有错误的也会提交上去。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是我们数据中的大忌!

我们通过声明式事务开启事务
在这里插入图片描述
我们把要提交的一类的业务放在一块进行提交,这时如果一个提交不上,就全部提交不上了。
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值