Spring Boot 3.4.0 的多个方面

问题描述 投票:0回答:1

我最近将 Spring Boot 从 3.3.0 升级到 3.4.0,我的一个方面停止了工作。

我的自定义注释名为

@OnError(clazz =...)
添加在方法级别,并具有针对它的方面切入点:

@Around("execution(* de.hidden.service.api.controller..*.*(..)) && @annotation(de.hidden.service.api.util.aspects.errorshandling.OnError)")

我还使用 Micrometer 中与

@Timed
 相关的 
TimedAspect
注释。我在类级别使用此注释。

使用 Spring Boot 3.3.0,这两方面都工作得很好。自 3.4.0 起,当使用针对我的

TimedAspect
的方面时,
@OnError
停止工作。

  • 我已经将 Micrometer 更新到最新版本
    1.4.2
  • 我试图给我的方面一个
    @Order
    (非常高或非常低,没有效果)。
  • 当我尝试调试
    TimedAspect
    时,切入点似乎不匹配 - 它不会停止在方法的第一行。

如果有人提供线索那就太好了。

更新:我在这里添加了MCVE:https://github.com/mzander/spring-boot-3.4.0-aop-MCVE 我使用了 Micrometer 的

TimedAspect
CountedAspect
。同样的问题 - 如果执行的话只有一个问题。在此示例中,执行了
TimedAspect
,但不执行
CountedAspect

spring-boot kotlin aop spring-aop
1个回答
0
投票

这对于评论来说太长了,所以我正在写一个初步答案。

我玩了你的 MCVE 项目,发现破坏你的情况的行为是从依赖关系

io.micrometer:micrometer-core:1.13.9
切换到
1.14.0
或以上。所有其他 Micrometer 依赖项都可以是
1.14.2
,它仍然有效。您看到它在 Boot 3.4.0 中中断的原因是您的依赖项管理仅考虑
micrometer-registry-prometheus
,而不考虑其他自动导入为传递依赖项。如果您手动执行类似的操作,它将在 Boot 3.4.0 中继续工作:

    implementation("io.micrometer:micrometer-registry-prometheus:1.14.2")
    implementation("io.micrometer:micrometer-core:1.13.9")
    implementation("io.micrometer:micrometer-observation:1.14.2")
    implementation("io.micrometer:micrometer-jakarta9:1.14.2")
    implementation("io.micrometer:micrometer-commons:1.14.2")

一旦切换到

micrometer-core:1.14.0
或更高,计时和计数方面就不再按预期运行。这可能是 Micrometer 问题 #1149 的副作用,该问题已在 1.14.0 中解决,并且我对此做出了一些贡献,尽管最终的提交与我的想法有点不同。我还没有详细调试过它,但也许你想和 Micrometer 的人谈谈。我不是 Micrometer 用户,只是 AOP 专家。

实际上,我不确定您想要通过编译后编织实现什么以及为什么您认为需要它。你没有解释,你的MCVE也没有说清楚。根据您的答案,也许您需要以不同的方式配置 Freefair 插件,因为一方面您似乎希望使用 Micrometer 和自定义方面作为 Spring 组件,另一方面您似乎认为出于某种原因需要本机 AspectJ 。您需要小心,不要以错误的方式混淆它们。

© www.soinside.com 2019 - 2024. All rights reserved.