你还搞不定生涩难懂的Spring-Aop?梳理完毕以后原来如此简单

①确定要增强的target对象

也就是哪些类需要增强?对spring来说,目标就是bean对象。

②配置增强

Advice通知,也就是我们要增强一个什么功能,会在②对应的类中说明。

③配置切入点

即要拦截的连接点有哪些(方法)

  • id=“myPointcut”:切入点唯一标识。

  • expression表达式:匹配方法的。

expression=bean(*Service)表示在spring容器中,所有id/name以Service结尾的bean都能被拦截。

④配置切面

也就是:要对哪些方法(pointcut),进行怎样的增强?(advice)

  • advice-ref=“timeLogAdvice”,即对应怎样的增强。
  • pointcut-ref=“myPointcut”,即对应哪些方法需要增强。

2编写传统aop的Advice通知类

①环绕通知

通知主要有四类,即增强的位置:

  • 前置通知MethodBeforeAdvice:在目标方法执行前实施增强。

  • 后置通知AfterReturningAdvice:在目标方法执行后实施增强。

  • 环绕通知MethodInterceptor:在目标方法执行前后实施增强。

  • 异常抛出通知ThrowsAdvice:在方法抛出异常后实施增强。

在这里因为我们需要在方法前后实施增强,所以我们使用环绕通知,需要实现对应接口。

注意:接口不要弄混淆了,是org.aoplliance中的接口,不是cglib中的。

②invoke方法

参数为Methodinvocation。

③调用目标对象的方法

这个就相当于method.invoke()。

④记录日志

这个涉及到日志配置文件的编写。

3使用spring的junit集成测试

①@RunWith注解和@ContextConfiguration注解

  • 通过@RunWith注解,使用junit整合spring。
  • 通过@ContextConfiguration注解,指定spring容器的位置。

②@Autowired注解

通过@Autowired注解,注入需要测试的对象,在这里注意2点:

  • 将测试对象注入到测试用例中。
  • 测试用例不需要配置context:annotion-config/,因为使用测试类运行的时候,会自动启动注解的支持。

③调用测试方法完成测试

二、Aspectj(xml)配置AOP

上述传统方法中需要实现对应的通知接口,而在Aspectj中就不需要了。

1Xml配置AOP开发方法还是三步

  • 确定要增强谁?(bean)
  • 确认增强什么功能?(通知advice)
  • 确定需要增强的方法有哪些?(切入点pointcut)

而如何将它们对应起来就需要配置切面了。

①②③和传统的配置是一样的,不再赘述,只说不同的地方。

④配置切面

通知是有好几种的,重点也就是这个通知类型,将其弄懂了,xml和注解也就简单了:

  • aop:before也就是前置通知。
  • aop:after-returning也就是后置通知。
  • aop:around 也就是环绕通知。
  • aop:after-throwing也就是抛出通知。
  • aop:after也就是最终通知。

method:通知类中的方法名;pointcut-ref=“myPointcut”:注入切入点。

2通知类的编写

因为测试方法和上述是差不多的,所以不再赘述,将测试结果放在一起说明:

配置文件中给指定方法设置通知的类型,beforeTest方法就是前置通知。

增强CustomerServiceImpl类中的所有方法,前置通知就相当于在对应方法之前执行增强的功能。

joinPoint就是连接点,在这里也就是目标对象中的所有方法,该参数是一个可选参数,其有三个常用的方法:

  • getSignature()方法:获取目标对象中的方法。
  • getThis()方法:获取的是代理对象。
  • getTarget()方法:获取的也就是目标对象。

我这边只说明一下前置通知,其它的基本上都是大同小异的。

不过每个通知都有自己的应用场景,这个以后遇到具体的场景了再说明。

我会在以后做一个其对应的应用合集。

三、Aspectj注解配置AOP

会了xml,注解就真心很简单了。

1配置xml文件

![](https://upload-images.jianshu.io/upl

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

oad_images/24195226-aca3c1d6f87ba060.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

①配置注解扫描

②配置aspectj的自动代理机制
容开源分享**

oad_images/24195226-aca3c1d6f87ba060.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

①配置注解扫描

②配置aspectj的自动代理机制

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值