您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

spring框架之切面编程步骤说明

时间:2020-08-19 10:18:24  来源:  作者:
spring框架之切面编程步骤说明

 

今天学习内容安排如下:

  • 切面配置的核心三步骤。
  • 传统sprin配置和AspectJ配置都学下,xml和注解都使用下。
  • 同时为了测试,补充说明一下spring的junit集成,几天前没来得及学的知识点。

一、传统Spring AOP编程

这种方式在现在的开发中基本不会使用,但为了更好地和AspectJ对比还是做一个了解。

1切面编程开发三步骤

spring框架之切面编程步骤说明

 

①确定要增强的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通知类

spring框架之切面编程步骤说明

 

①环绕通知

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

  • 前置通知MethodBeforeAdvice:在目标方法执行前实施增强。
  • 后置通知AfterReturningAdvice:在目标方法执行后实施增强。
  • 环绕通知MethodInterceptor:在目标方法执行前后实施增强。
  • 异常抛出通知ThrowsAdvice:在方法抛出异常后实施增强。

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

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

spring框架之切面编程步骤说明

 

②invoke方法

参数为Methodinvocation。

③调用目标对象的方法

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

④记录日志

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

3使用spring的junit集成测试

spring框架之切面编程步骤说明

 

①@RunWith注解和@ContextConfiguration注解

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

②@Autowired注解

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

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

③调用测试方法完成测试

二、Aspectj(xml)配置AOP

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

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

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

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

spring框架之切面编程步骤说明

 

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

④配置切面

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

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

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

2通知类的编写

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

spring框架之切面编程步骤说明

 

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

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

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

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

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

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

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

三、Aspectj注解配置AOP

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

1配置xml文件

spring框架之切面编程步骤说明

 

①配置注解扫描

②配置aspectj的自动代理机制

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

2通知类的编写

spring框架之切面编程步骤说明

 

①确认目标对象

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

②确认增强的功能

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

③环绕通知

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

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

④抛出通知

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

当然还有其它几种通知:

  • @Before前置通知,相当于BeforeAdvice。
  • @AfterReturning后置通知,相当于AfterReturningAdvice。
  • @After最终final通知,不管是否异常,该通知都会执行。

最后

AOP这块的知识点有点生涩难懂,自己无论是学习效率还是笔记质量这块都下降了很多,这我也是能感受到的。

只能说目前来说所追求的还是一个学习进度,保证每天都有输出,至于质量问题只能留待以后一点点优化了。

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。



Tags:切面编程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
今天学习内容安排如下: 切面配置的核心三步骤。 传统sprin配置和AspectJ配置都学下,xml和注解都使用下。 同时为了测试,补充说明一下spring的junit集成,几天前没来得及学的知识...【详细内容】
2020-08-19  Tags: 切面编程  点击:(111)  评论:(0)  加入收藏
今天是刘小爱自学Java的第123天。感谢你的观看,谢谢你。 学过很多面向XX编程,比如:面向过程编程,面向对象编程,面向接口编程,现在又是面向切面编程。但是不管如何,说来说去最终都是...【详细内容】
2020-08-15  Tags: 切面编程  点击:(132)  评论:(0)  加入收藏
▌简易百科推荐
本篇文章主要介绍了使用MyBatis框架完成数据库的增、删、改、查操作。准备工作运行schema.sql和data.sql脚本文件中的 SQL 语句创建t_user表并添加部分测试数据。schema.sql...【详细内容】
2022-07-15  嗨皮汪小成    Tags:MyBatis   点击:(0)  评论:(0)  加入收藏
1 Hive基本概念Hive是一个构建在Hadoop上的数据仓库框架。最初,Hive是由Facebook开发,后来移交由Apache软件基金会开发,并作为一个Apache开源项目。Hive是基于Hadoop的一个数据...【详细内容】
2022-07-15  秃头Java人    Tags:Hive   点击:(2)  评论:(0)  加入收藏
今天给大家讲讲 SpringBoot 框架 整合 Elasticsearch 实现海量级数据搜索。一、简介在上篇ElasticSearch 文章中,我们详细的介绍了 ElasticSearch 的各种 api 使用。实际的项...【详细内容】
2022-07-15  java小悠    Tags: Elasticsearch   点击:(3)  评论:(0)  加入收藏
SpringBoot开发Restful接口,有什么API规范吗?如何快速生成API文档呢?Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web 服务。通俗的来讲,Swagger 就是将项目中所有(想要...【详细内容】
2022-07-14  Java全栈知识体系    Tags:Swagger   点击:(2)  评论:(0)  加入收藏
一、部署准备安装数据库、jdk、nginx、域名证书1、下载 nginx,官方网址如下:http://nginx.org/en/download.html2、解压安装包到任意目录 如:G:\nginx二、前端部署1、打开前端...【详细内容】
2022-07-14  智慧魔法豆浆    Tags:vue   点击:(2)  评论:(0)  加入收藏
SpringBoot 内置支持的 Web 容器有 Tomcat、Undertow、Jetty 和 Netty。默认情况下,这些 Web 服务的 AccessLog 日志是不开启的,而 AccessLog 日志对于做接口统计尤为重要。如...【详细内容】
2022-07-13  BUG弄潮儿    Tags:AccessLog 日志   点击:(10)  评论:(0)  加入收藏
什么是Starterstarter 是springboot 的核心,每个starter负责实现特定的功能,使用者只需引入starter即可自动配置,无需关心框架整合带来的问题。Starter 项目结构src |- main...【详细内容】
2022-07-12  IT食者    Tags:SpringBoot   点击:(9)  评论:(0)  加入收藏
mybaits非必填项处理数据库表字段khzjyxqx为日期型,非必填, 前台页面如下: 后台mybaits处理如下: 如果不处理,当为空时khzjyxqx=&#39;&#39;时会报错。<update id="updatesave" pa...【详细内容】
2022-07-11  在水一方357159258    Tags:mybaits   点击:(10)  评论:(0)  加入收藏
关于过气网红编程语言 Ruby,我们此前曾发过一篇文章去回顾其大受追捧的过往,并讨论了它每况愈下的生存状态。不过人气并不能直接说明语言质量差,一方面 Ruby on Rails(用 Ruby...【详细内容】
2022-07-08  InfoQ    Tags: Web 框架   点击:(9)  评论:(0)  加入收藏
1、JWT的构成- 头部(header):描述该JWT的最基本的信息,如类型以及签名所用的算法。- 负载(payload):存放有效信息的地方。- 签证(signature):base64加密后的header、base64加...【详细内容】
2022-07-08  dream19    Tags:SpringBoot   点击:(10)  评论:(0)  加入收藏
站内最新
站内热门
站内头条