Spring框架知识拓展-Spring使用AspectJ实现AOP前置通知

温馨提示:这篇文章已超过1013天没有更新,请注意相关的内容是否还可用!

其实AOP_AspectJ的编程与传统的AOP的编程的最大的区别就是写一个Aspect 支持多个Advice和多个PointCut 。而且我们写AOP_Aspctj不需要继承任何的接口,不像传统的AOP还要继承接口。

1、前置通知是在运行我们被代理的方法之前先执行的。

2、前置通知具有如下的特点:

1)在目标方法执行前 进行增强代码。

2)AspectJ 提供Advice无需实现任何借口, 可以将很多通知代码 写入一个类 (切面类)

3)前置通知定义方法: 无返回值,可以传入参数 JoinPoint 连接点

相关视频教程https://www.bilibili.com/video/BV1nz4y1d7uy

简介:

本套Java视频教程主要讲解了Spring4在SSM框架中的使用及运用方式。本套Java视频教程内容涵盖了实际工作中可能用到的几乎所有知识点。为以后的学习打下坚实的基础。

什么是AOP?

AOP面向切面编程,是基于动态代理的。AOP就是动态代理的规范化,把动态代理的实习按步骤和方式都定义好了,让开发人员用一种统一的方式使用动态代理。

Aspect Orient Programming:面向切面编程

Aspect:切面。给目标类增加的功能就是切面。添加的日志信息和事务都是切面。

切面的最大特点就是:非业务方法,和我们的业务功能没有关系,可以独立使用的。

怎么理解面向切面编程:

1、需要在分析项目时,找出切面。

2、合理的安排切面的执行时间(是在目标方法前执行,还是在目标方法后执行)。

3、合理的安排切面执行的位置(在哪个类,哪个方法增加增强功能)。

术语:

1、Aspect:切面,表示要给业务方法增强的功能,就是一堆代码,这堆代码完成某一个功能。切面是非业务功能(日志,事务,统计信息,参数检查,权限验证)

2、JoinPoint:连接点,连接业务方法和切面的位置,就是某个类中的业务方法。

3、PointCut:切入点,指多个连接点方法的结合。是多个方法,这些方法都要加入切面的功能。

4、目标对象:要给哪个类增加方法

5、Advice:通知,表示切面功能的执行时间(切面在什么时候执行,是在方法之前还是在方法之后)

一个切面有3个关键的要素:

1、切面的功能代码:切面要干什么

2、切面的执行位置,使用pointcut表示

3、切面的执行时间:在目标方法之前还是在目标方法之后,用advice表示

AOP的实现:是一个规范,是对动态代理的一个规范化。

AOP的技术实现框架:

1.Spring:Spring实现了AOP规范,主要在事务处理时使用了AOP。项目开发中很少使用Spring的AOP实现。

2.aspectJ:一个开源的专门做AOP的框架。Spring框架中集成了aspectJ框架,通过Spring就能使用aspectJ框架的功能了。aspectJ框架实现AOP有两种方式:

1)使用xml配置文件

2)使用注解(我们在项目中要做AOP功能,一般都使用注解),aspectJ有5个注解。

学习aspectJ框架的使用:

1、切面的执行时间,也就是advice通知。在aspectJ框架中是使用注解来表示的。

@Before:

@AfterReturning

@Around

@AfterThrowing

@After

2、表示切面执行的位置,使用的是切入点表达式。

execution (访问权限 方法返回值 方法声明(参数)异常类型)

其中,访问权限和异常类型这两个可以省略。

切入点表达式要匹配的对象就是目标方法的方法名字。

举例:

execution(public **(..)):指定切入点为任意公共方法

execution(*set*(..)):指定切入点为任何一个以set开始的方法

execution(*com.xyz.service.*.*(..)):指定切入点为com.xyz.service 包中的任意类中的任意方法

使用aspectJ框架实现aop

使用aop的目的是给已经存在的类和方法在不改变原来的代码的情况下增加额外的功能。

使用aspectJ实现AOP的基本步骤:

1、新建maven项目

2、加入依赖:Spring依赖、aspectJ依赖、Junit 单元测试

3、创建目标类:这个类有接口和接口的实现类。我们想要给这个类中的方法增加功能。

4、创建切面类(增加功能的代码写在切面类里面):普通类

1)在类的上面加入@Aspect注解

2)在类中定义切面方法,方法就是切面要执行的功能代码。在方法上面加入aspectJ中的通知注解,例如@Before,还需要指定切入点表达式。

5、要把对象交给容器去创建,由容器Spring管理这些对象。

创建Spring的配置文件,在配置文件中声明对象,把对象交给容器统一管理。声明对象可以使用注解或者xml的<bean>标签。

1)声明目标对象

2)声明切面类对象

3)声明aspectJ框架中的自动代理生成器标签。

自动代理生成器:用来完成代理对象的自动创建功能的。

6、创建测试类,从Spring容器中获取目标对象(这个对象实际就是代理对象)。通过代理执行方法,实现AOP的功能增强。

完整代码:

IDEA-Maven-模板选择quickstart-pom.xml添加相关依赖:(1)Spring依赖(2)aspectJ依赖(3)Junit 单元测试

Spring框架知识拓展-Spring使用AspectJ实现AOP前置通知 第1张

Spring框架知识拓展-Spring使用AspectJ实现AOP前置通知 第2张

Maven查看添加的依赖:

Spring框架知识拓展-Spring使用AspectJ实现AOP前置通知 第3张

Com.hik包下面的类和接口:

SomeService接口

Spring框架知识拓展-Spring使用AspectJ实现AOP前置通知 第4张

SomeService接口的实现类SomeServiceImpl

Spring框架知识拓展-Spring使用AspectJ实现AOP前置通知 第5张

MyAspect类

Spring框架知识拓展-Spring使用AspectJ实现AOP前置通知 第6张

main目录下的resource中设置配置文件:applicationcontext.xml

Spring框架知识拓展-Spring使用AspectJ实现AOP前置通知 第7张

测试类

Spring框架知识拓展-Spring使用AspectJ实现AOP前置通知 第8张

执行结果:

前置通知,切面功能:在目标方法之前输出执行时间:Thu Jan 13 16:30:16 CST 2022

目标方法doSome()执行

Process finished with exit code 0

九七分享吧所有文章来源于网络收集整理,如有侵权请联系QQ2387153712删除,如果这篇文章对你有帮助或者还不错的请给小编点个小赞(◠‿◠),小编每天整理文章不容易(ಥ_ಥ)!!!

文章版权声明:除非注明,否则均为九七分享吧原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

苹果 iOS/iPadOS 15.4.1 正式版发布

哎呦,被盗哦!周杰伦无聊猿NFT疑被钓鱼,价值超300万

“蔚小理”一季度成绩单:小鹏理想均跨过三万辆门槛,蔚来垫底

最完整的人类基因组序列,今天凌晨公布了!

手机行业不景气了?国产厂商大砍单:1.7亿订单取消

快手或将受益于互联网监管

我国实现首例V频段低轨卫星测控

北京外卖封签上线首日调查:1个封签约2分钱,已大面积推广

iPhone更换微信图标教程,安卓:不就是换个主题?

豆瓣关闭私密小组,壮士断腕为时未晚

台积电将5nm产量提高到15万片/月

京东增持京东物流 为了挽救股价还是应对激烈竞争?

发表评论

表情:
评论列表 (暂无评论,432人围观)

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码