Spring 带有 GraalVM 本机图像的 AOP

Spring AOP with GraalVM Native Image

有什么方法可以在Spring Boot GraalVM native-image 中使用方面吗?我需要它用于记录目的。我在图像 运行:

上遇到以下错误
Caused by: org.aspectj.weaver.BCException: AspectJ internal error

        at org.aspectj.weaver.reflect.ReflectionWorld.makeAnnotationFinderIfAny(ReflectionWorld.java:132) ~[na:na]
        at org.aspectj.weaver.reflect.ReflectionWorld.<init>(ReflectionWorld.java:97) ~[na:na]
        at org.aspectj.weaver.reflect.ReflectionWorld.getReflectionWorldFor(ReflectionWorld.java:51) ~[na:na]
        at org.aspectj.weaver.tools.PointcutParser.setClassLoader(PointcutParser.java:222) ~[na:na]
        at org.aspectj.weaver.tools.PointcutParser.<init>(PointcutParser.java:208) ~[na:na]
        at org.aspectj.weaver.tools.PointcutParser.getPointcutParserSupportingSpecifiedPrimitivesAndUsingSpecifiedClassLoaderForResolution(PointcutParser.java:170) ~[na:na]
        at org.springframework.aop.aspectj.AspectJExpressionPointcut.initializePointcutParser(AspectJExpressionPointcut.java:242) ~[na:na]
        at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:221) ~[na:na]
        at org.springframework.aop.aspectj.AspectJExpressionPointcut.obtainPointcutExpression(AspectJExpressionPointcut.java:198) ~[na:na]
        at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:177) ~[na:na]
        at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:226) ~[na:na]
        at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:289) ~[na:na]
        at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:321) ~[na:na]
        at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:128) ~[com.fon.footballfantasy.FootballFantasyApplication:5.3.1]
        at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:97) ~[com.fon.footballfantasy.FootballFantasyApplication:5.3.1]
        at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:78) ~[com.fon.footballfantasy.FootballFantasyApplication:5.3.1]
        at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:337) ~[com.fon.footballfantasy.FootballFantasyApplication:5.3.1]
        at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:289) ~[com.fon.footballfantasy.FootballFantasyApplication:5.3.1]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:444) ~[na:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[na:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[na:na]
        ... 37 common frames omitted

估计是SpringAOP运行时间编织问题,请问如何解决?

编辑:
谢谢你的回答! 很抱歉没有提前提供额外的信息。
示例项目:https://github.com/programer20/graalvm-demo
我按照官方文档 入门 步骤 https://repo.spring.io/milestone/org/springframework/experimental/spring-graalvm-native-docs/0.8.3/spring-graalvm-native-docs-0.8.3.zip!/reference/index.html#_getting_started
创建原生图像 我尝试了 0.8.3 和 0.8.5 版本。

我认为你对这个问题的看法是正确的。如果您正在进行构建时编织,那将完全没问题,因为修改后的字节代码将被送入 GraalVM native-image 进行分析并包含在图像中。如果进行加载时间编织,我 相信 它可以工作,但如果您在构建本机图像时使用加载时间编织(通过设置 java 选项,最近尚未确认包括 aspectjweaver 代理),类 将在加载时编织,编织形式将包含在图像中。它永远无法在图像运行时真正工作,因为不再有 类 的概念,并且无法动态定义 类。

所以是的,因为 Spring AOP 可以在很晚的时候完成,随着配置的解决,可能会有问题。查看 spring native 项目以获得将您的 Spring 项目构建为本机图像的最新支持,但我记得我们现在没有 Spring AOP 的示例。我鼓励您针对该项目提出问题,包括显示您的特定问题可能非常宝贵的示例项目。您还没有提到您现在是如何创建本机图像的,这可能会影响我的建议。我认为在此过程中更早地推动一些 analysis/weaving 可能会使它起作用,但还没有进入 space。