Spring AOP中@Aspect拦截介绍(二)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring AOP中@Aspect拦截介绍(二)相关的知识,希望对你有一定的参考价值。

参考技术A 本章介绍的@Aspect拦截用的注解方式,对于想要实现多数据源切换,在指定类或方法上只需加上一个注解便可以实现入参出参日志打印的小伙伴,要认真看那一大堆有关Spring AOP支持的AspectJ切入点指示符的注释了。
使用 @Pointcut("@within(com.example.springboot.common.aspectj.LogAspect)") 就是在你想打日志的类上加上自定义注解@LogAspect;
使用 @Pointcut("@annotation(com.example.springboot.common.aspectj.LogAspect)") 就是在你想打日志的方法上加上自定义注解@LogAspect;
其他的指示符大家自行探索其中的奥秘吧,有需要改进的联系我哦!

@LogAspect

Father.java

Child.java

TestController.java

注意:
@within:这个最后实现的效果是吧自定义注解加到类上,本章便是用的这个注解
@annotation这个最后实现的效果是吧自定义注解加到方法上

TestAspect.java

使用postman调用TestController中的两个方法,测试后发现子类继承了父类中的自定义注解@LogAspect。
第二步测试,去掉LogAspect类中的@Inherited注解,重新启动项目测试就会发现子类不再继承父类的自定义注解。

Spring AOP中@Aspect拦截介绍(一)

参考技术A 本章介绍的@Aspect拦截用的非注解方式,而是通过切入点@Pointcut指定要拦截的目录,本章节实现了拦截请求和返参后对其进行修改,类似于过滤器的作用

User.java

AspectTestController.java

TestAspect.java

如果想要学习或者加上该封装结构,可以在笔者的项目笔记目录下寻找“项目返参结构封装”就可以直接复制了,当然也可以自己返回一个String或者Object类型先测试用着

本测试例子中已经把 @Before和@After和@AfterReturning注掉了,只使用的@Around,可以直接用postman调用测试的,测完还可以放开前面三个注解,再把@Around注掉再测就可以了。

无参的那个测试不能用@Around测试,想要用@Around测试需要改一下,@Around("pointCut() && args(arg)")改为@Around("pointCut() "),下面的入参和修改参数部分去掉即可

以上是关于Spring AOP中@Aspect拦截介绍(二)的主要内容,如果未能解决你的问题,请参考以下文章

Spring AOP详细介绍

使用PostSharp实现AOP拦截

spring aop无法拦截类内部的方法调用

spring aop

spring中的aop实现各个类方法的日志拦截

Java实战之03Spring-03Spring的核心之AOP(Aspect Oriented Programming 面向切面编程)