spring_aop_demo(基于xml)

AOP有啥作用?
为啥要用aop?
需求在哪?

设定一种情况:你只负责你自己部分的代码,其他人也只负责各自的代码,那么要是要求你们各自做的功能模块先后使用,且不能修改各自的代码,该如何做?
这就是aop的应用场景——即在不改各自代码的情况下实现功能叠加增强

接下来做个demo,顺序大致为:
1)在pom文件中导入坐标,
2)创建目标接口与目标类(这就是被增强的方法,即切点)
3)创建切面类(这就是增强方法)
4)将目标类和切面类的对象创建权交给spring
5)在xml中配置(配置织入关系)
6)测试是否成功

1)在这里插入图片描述
2)与3)
目标接口
在这里插入图片描述
目标类在这里插入图片描述
切面类
在这里插入图片描述
4)同样创建springconfig的xml,配置
在这里插入图片描述
5)织入配置
首先要引入aop的命名空间
(灰色部分)
在这里插入图片描述
配置aop在这里插入图片描述
配置好后测试
这里使用一下spring集成junit来测试
先导入spring-test坐标
在这里插入图片描述
然后编写测试类
在这里插入图片描述
执行后结果为
在这里插入图片描述
前置增强成功
成功实现了不改变两个类的代码的情况下让功能融合了起来
———————————————————————
切点表达式的写法(即被增强的方法)
pointcut属性的表达式写法为——execution([修饰符] 返回值类型 包名.类名.方法名(参数))

其中修饰符可省略
返回值类型、包名、类名、方法名可以使用*代替,表示任意
参数可以使用…代替,表示任意

例子:

execution(public void com.wzy.aop.target.method())
指特定的方法
execution(void com.wzy.aop.target.*(..))
指定类中的任意方法,参数为任意
execution(* com.wzy.aop.*.*(..))
指定任意返回值的aop包下的任意类的任意方法,⭐常用这种
execution(* *..*.*(..))
搞笑的

————————————————————

增强除了前置类型还有哪些?
(通知和增强在这是一个意思)
1.前置通知——<aop:before>
2.后置通知——<aop:after-turning>

3.环绕通知——<aop:around>
如何写环绕加强方法?
在这里插入图片描述
配置xml在这里插入图片描述
测试即可

4.异常抛出通知——<aop:throwing>:即如果切点方法有异常就执行切面方法。
注意!!!这个切面方法不能有异常
5.最终通知——<aop:after>:无论如何都会执行的切面方法

————————————————————————
抽取切点表达式:
若加强的是同一个切点,则可以将切点表达式抽取出来
例子:前置加强和后置增强都增强同一个方法
我比较懒,前置增强和后置增强都用同一个方法
在这里插入图片描述

抽取切点表达式后
切点被抽出来并用before这个id表示,增强时切点就用ref连上id就行
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值