Files
springboot-demo/target/classes/com/example/demo/controller/AopEventController.class

13 lines
5.7 KiB
Plaintext
Raw Normal View History

2026-03-18 15:18:30 +08:00
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>=<00>
 java/lang/Object<init>()V  
.com/example/demo/controller/AopEventController userService&Lcom/example/demo/service/UserService;  eventPublisher+Lcom/example/demo/event/UserEventPublisher;  performanceAspect(Lcom/example/demo/aop/PerformanceAspect;  rateLimitAspect&Lcom/example/demo/aop/RateLimitAspect;java/util/HashMap
messageSpring Boot 学习中心 !"# $% java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;'topics)java/lang/String+AOP 切面编程- 事件机制/Bean 生命周期1 endpoints3%GET /aop - AOP 概念说明5!GET /aop/stats - 性能统计7'GET /aop/event - 事件机制说明9,POST /aop/event/publish - 发布用户事件;,GET /aop/event/history - 查看事件历史=%GET /aop/ratelimit - 限流测试?titleAconceptsC/Aspect切面: 横切关注点的模块化E2JoinPoint连接点: 程序执行的某个点G4Pointcut切入点: 匹配连接点的表达式I/Advice通知: 在连接点执行的动作K3Weaving织入: 将切面应用到目标对象M adviceTypesO@Before - 方法执行前Q3@After - 方法执行后(无论成功或异常)S'@AfterReturning - 方法成功返回后U&@AfterThrowing - 方法抛出异常后W%@Around - 环绕通知(最强大)YuseCases[ 日志记录] 性能监控_ 事务管理a 权限检查c 限流控制e方法性能统计g descriptioni"由 PerformanceAspect 自动收集k
statistics
mno pq&com/example/demo/aop/PerformanceAspect getStatistics()Ljava/util/Map;sSpring 事件机制u+ApplicationEventPublisher - 事件发布者w @EventListener - 事件监听器y@Async - 异步处理事件{condition - 条件过滤}benefits*解耦:发布者和监听者互不依赖<00>-扩展:新增监听器无需修改发布者<00>'异步:耗时操作不阻塞主流程<00>$测试:更容易进行单元测试<00>
eventTypes<00>CREATED - 用户创建<00>UPDATED - 用户更新<00>DELETED - 用户删除<00>LOGIN - 用户登录
<00><00><00> <00><00>)com/example/demo/event/UserEventPublisherpublishUserLogin%(Ljava/lang/Long;Ljava/lang/String;)V<00>事件已发布<00> eventType<00>userId<00>userName<00>事件历史记录<00>note<00>"由 UserEventListener 自动记录<00> 请求成功<00>使用 @RateLimited 注解<00>rateLimitStatus
<00><00><00> <00>q$com/example/demo/aop/RateLimitAspectgetRateLimitStatus<00>(Lcom/example/demo/service/UserService;Lcom/example/demo/event/UserEventPublisher;Lcom/example/demo/aop/PerformanceAspect;Lcom/example/demo/aop/RateLimitAspect;)VCodeLineNumberTableLocalVariableTablethis0Lcom/example/demo/controller/AopEventController;MethodParametersindexinfoLjava/util/Map;LocalVariableTypeTable5Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>; Signature7()Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;RuntimeVisibleAnnotations4Lorg/springframework/web/bind/annotation/GetMapping;aopInfovalue/aopgetPerformanceStatsresult
/aop/stats eventInfo/event publishEventE(Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;Ljava/lang/Long;Ljava/lang/String;k(Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;5Lorg/springframework/web/bind/annotation/PostMapping;/event/publish"RuntimeVisibleParameterAnnotations6Lorg/springframework/web/bind/annotation/RequestParam; defaultValueLOGINgetEventHistory/event/history testRateLimit
/ratelimit"Lcom/example/demo/aop/RateLimited;
#测试限流每分钟最多10次
2026-03-18 15:18:30 +08:00
SourceFileAopEventController.java8Lorg/springframework/web/bind/annotation/RestController;8Lorg/springframework/web/bind/annotation/RequestMapping;! <00><00><00>*<2A>*+<2B>*,<2C> *-<2D>*<04><15><00> !"#<00>4<00><00> <00> <00>q<00><00>]<5D>Y<>L+<1E> W+&<06>(Y*SY,SY.S<> W+0<06>(Y2SY4SY6SY8SY:SY<S<> W+<2B><00>*+,/1[9<00>]<00><00>U<00><00><00> U<00><00><00><00><00><00><00>q<00><00><00><>Y<>L+>*<2A> W+@<08>(YBSYDSYFSYHSYJS<4A> W+L<08>(YNSYPSYRSYTSYVS<56> W+X<08>(YZSY\SY^SY`SYbS<62> W+<2B><00>CDE9L_S<00>Z<00><00><00><00><00><00><00> <00><00><00><00><00><00><00>[s<00><00>q<00><00>0<>Y<>L+>d<> W+fh<> W+j*<2A><11>l<> W+<2B><00>bcde.f<00>0<00><00>(<00><00><00> (<00><00><00><00><00><00><00>[s<00><00>q<00><00>x<>Y<>L+>r<> W+@<07>(YtSYvSYxSYzS<7A> W+|<07>(Y~SY<12>SY<12>SY<12>S<EFBFBD> W+<12><07>(Y<12>SY<12>SY<12>SY<12>S<EFBFBD> W+<2B><00>pqr4xU~v<00><00>x<00><00>p<00><00><00> p<00><00><00><00><00><00><00>[s<00><00><00><00><00>B*<2A> +,<2C><00><>Y<>:<12><> W<12>-<2D> W<12>+<2B> W<12>,<2C> W<04><00><00> <00><00><00>)<00>4<00>?<00><00>4B<00><00>B<00><00>B<00><00>B<00><00>0<00><00><00> 0<00><00><00> <00><00><00><00><00><00><00><00>[s<00><00><00><00><00><00>s<00><00>q<00>r <20>Y<>L+><12><> W+<12><12><> W+<2B><00><00><00><00><00><00> <00><00><00><00><00> <00><00><00><00><00><00><00>[s<00><00>q<00><00>0<>Y<>L+<12><> W+<12><12><> W+<12>*<2A><15><00><> W+<2B><00><00><00><00><00>.<00><00>0<00><00>(<00><00><00> (<00><00><00><00><00><00><00>[s<00><00><00>J<00>s<00><00><00><00><00><00><00>[s<00>