package com.tiangang.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.aspectj.lang.annotation.Aspect;
import java.lang.reflect.Method;
import java.util.Arrays;
/**
* 作者:天罡gg
* 博文地址:https://blog.csdn.net/scm_2008/article/details/128593857
* 有任何问题,欢迎大家私信联系我.
*/
@Component
@Aspect
public class MethodLogAspect {
@Pointcut(value = "@annotation(com.tiangang.aop.MethodLog)")
public void pointCut() {
}
@Before("pointCut()")
public void before(JoinPoint joinPoint) throws NoSuchMethodException {
printMethod(joinPoint, "[前置通知before]");
}
@After("pointCut()")
public void after(JoinPoint joinPoint) throws NoSuchMethodException {
printMethod(joinPoint, "[后置通知after]");
}
// 注意要加returning参数,否则会报:0 formal unbound in pointcut
@AfterReturning(value = "pointCut()", returning = "result")
public void afterReturning(JoinPoint joinPoint, Object result) throws NoSuchMethodException {
printMethod(joinPoint, "[返回通知afterReturning]");
System.out.printf("[MethodLogAspect]切面 [返回通知afterReturning] 打印结果 -> result:%s%n", result);
}
// 注意要加throwing参数,否则会报:0 formal unbound in pointcut
@AfterThrowing(value = "pointCut()", throwing = "e")
public void afterThrowing(JoinPoint joinPoint, Exception e) throws NoSuchMethodException {
printMethod(joinPoint, "[异常通知afterThrowing]");
System.out.printf("[MethodLogAspect]切面 [异常通知afterThrowing] 打印异常 -> Exception:%s%n", e);
}
// 注意参数类型是 ProceedingJoinPoint
@Around("pointCut()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
printMethod(joinPoint, "[环绕通知around][proceed之前]");
// 执行方法
Object result = joinPoint.proceed();
System.out.printf("[MethodLogAspect]切面 [环绕通知around][proceed之后]打印 -> [result]:%s%n", result);
return result;
}
private void printMethod(JoinPoint joinPoint, String name) throws NoSuchMethodException {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Class<?> clazz = joinPoint.getTarget().getClass();
Method method = clazz.getMethod(signature.getName(), signature.getParameterTypes());
System.out.printf("[MethodLogAspect]切面 %s 打印 -> [className]:%s -> [methodName]:%s -> [methodArgs]:%s%n"
, name, clazz.getName(), method.getName(), Arrays.toString(joinPoint.getArgs()));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
博文地址:https://blog.csdn.net/scm_2008/article/details/128593857 在微服务流行的当下,在使用SpringCloud/Springboot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心!所以本系列就结合案例详细介绍@Aspect方式的切面的各种用法,力求覆盖日常开发中的各种场景。本文带来的案例是:打印Log,主要介绍@Pointcut切点表达式的@annotation方式,以及 五种通知Advice注解:@Before、@After、@AfterRunning、@AfterThrowing、@Around。 本资源是@Pointcut使用@annotation的方式,结合五种通知Advice实现了打印方法Log的功能。 有任何问题,欢迎大家私信联系我. 作者:天罡gg
资源推荐
资源详情
资源评论
收起资源包目录
天罡gg-pointcut-annotation.zip (62个子文件)
pointcut-annotation
pom.xml 1KB
src
test
java
main
resources
application.properties 0B
java
com
tiangang
controller
DemoController.java 807B
service
DemoService.java 486B
aop
MethodLogAspect.java 3KB
MethodLog.java 457B
MainApp.java 465B
.idea
jarRepositories.xml 2KB
libraries
Maven__org_springframework_spring_webmvc_5_2_8_RELEASE.xml 723B
Maven__org_springframework_spring_expression_5_2_8_RELEASE.xml 751B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_3_2_RELEASE.xml 834B
Maven__org_springframework_spring_jcl_5_2_8_RELEASE.xml 702B
Maven__org_springframework_boot_spring_boot_2_3_2_RELEASE.xml 729B
Maven__ch_qos_logback_logback_core_1_2_3.xml 640B
Maven__org_springframework_boot_spring_boot_starter_logging_2_3_2_RELEASE.xml 841B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_3_2_RELEASE.xml 827B
Maven__org_springframework_spring_context_5_2_8_RELEASE.xml 730B
Maven__org_springframework_spring_beans_5_2_8_RELEASE.xml 716B
Maven__org_slf4j_jul_to_slf4j_1_7_30.xml 627B
Maven__org_projectlombok_lombok_1_18_12.xml 624B
Maven__org_aspectj_aspectjweaver_1_9_6.xml 635B
Maven__org_apache_logging_log4j_log4j_api_2_13_3.xml 666B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_37.xml 718B
Maven__org_springframework_boot_spring_boot_starter_2_3_2_RELEASE.xml 785B
Maven__org_slf4j_slf4j_api_1_7_30.xml 606B
Maven__org_springframework_spring_web_5_2_8_RELEASE.xml 702B
Maven__org_springframework_boot_spring_boot_starter_json_2_3_2_RELEASE.xml 820B
Maven__ch_qos_logback_logback_classic_1_2_3.xml 661B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 726B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_37.xml 753B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_1.xml 774B
Maven__org_springframework_boot_spring_boot_starter_aop_2_3_2_RELEASE.xml 813B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_1.xml 744B
Maven__org_yaml_snakeyaml_1_26.xml 588B
Maven__org_springframework_boot_spring_boot_starter_web_2_3_2_RELEASE.xml 813B
Maven__org_glassfish_jakarta_el_3_0_3.xml 622B
Maven__com_fasterxml_jackson_core_jackson_databind_2_11_1.xml 723B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_1.xml 829B
Maven__org_springframework_spring_aop_5_2_8_RELEASE.xml 702B
Maven__com_fasterxml_jackson_core_jackson_core_2_11_1.xml 695B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_1.xml 788B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_13_3.xml 701B
Maven__org_springframework_spring_core_5_2_8_RELEASE.xml 709B
workspace.xml 3KB
misc.xml 390B
compiler.xml 910B
pointcut-annotation.iml 5KB
modules.xml 297B
.gitignore 50B
encodings.xml 267B
target
classes
application.properties 0B
com
tiangang
MainApp.class 701B
controller
DemoController.class 995B
service
DemoService.class 975B
aop
MethodLog.class 388B
MethodLogAspect.class 4KB
pointcut-annotation-2.3.2.RELEASE.jar 6KB
test-classes
maven-status
maven-compiler-plugin
compile
default-compile
createdFiles.lst 0B
inputFiles.lst 483B
testCompile
default-testCompile
createdFiles.lst 0B
inputFiles.lst 0B
maven-archiver
pom.properties 89B
generated-test-sources
test-annotations
generated-sources
annotations
共 62 条
- 1
资源评论
天罡gg
- 粉丝: 5w+
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功