写点什么

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

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:1380 字

    阅读完需:约 5 分钟


②invoke 方法


参数为 Methodinvocation。


③调用目标对象的方法


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


④记录日志


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


3 使用 spring 的 junit 集成测试



①@RunWith 注解和 @ContextConfiguration 注解


  • 通过 @RunWith


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


注解,使用 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 文件



①配置注解扫描


②配置 aspectj 的自动代理机制


设置好这两个标签之后,就可以全部都使用注解配置 AOP 了


2 通知类的编写



①确认目标对象


用注解将该类放入 spring 容器中。


②确认增强的功能


@Aspect 注解即表示,将其作为 aop 管理。


③环绕通知


ProceedingJoinPoint 是环绕通知中的一个参数,翻译过来就是可执行的连接点的意思。


通过该参数调用 proceed()方法就相当于执行原目标对象中的方法。


④抛出通知


这个是如果出现了异常,就会执行该增强功能,也就相当于 try…catch。


当然还有其它几种通知:


  • @Before 前置通知,相当于 BeforeAdvice。

  • @AfterReturning 后置通知,相当于 AfterReturningAdvice。

  • @After 最终 final 通知,不管是否异常,该通知都会执行。

最后

AOP 这块的知识点有点生涩难懂,只能说目前来说所追求的还是一个学习进度,保证每天都有输出,至于质量问题只能留待以后一点点优化了。#####大家看完有什么不懂的可以在下方留言讨论也可以关注.#####谢谢你的观看。#####觉得文章对你有帮助的话记得关注我点个赞支持一下!链接:https://juejin.im/post/6861541857713897486

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

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