Spring boot 带有GraalVM本机映像的Spring AOP

Spring boot 带有GraalVM本机映像的Spring AOP,spring-boot,aop,aspect,graalvm,Spring Boot,Aop,Aspect,Graalvm,有没有办法在Spring Boot GraalVM本机映像中使用方面?我需要它来记录日志。我在运行映像时遇到以下错误: Caused by: org.aspectj.weaver.BCException: AspectJ internal error at org.aspectj.weaver.reflect.ReflectionWorld.makeAnnotationFinderIfAny(ReflectionWorld.java:132) ~[na:na]

有没有办法在Spring Boot GraalVM本机映像中使用方面?我需要它来记录日志。我在运行映像时遇到以下错误:

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
原因:org.aspectj.weaver.BCException:aspectj内部错误
在org.aspectj.weaver.reflect.ReflectionWorld.makeAnnotationFinderIfAny(ReflectionWorld.java:132)~[na:na]
在org.aspectj.weaver.reflect.ReflectionWorld.(ReflectionWorld.java:97)~[na:na]
在org.aspectj.weaver.reflect.ReflectionWorld.getReflectionWorldFor(ReflectionWorld.java:51)~[na:na]
在org.aspectj.weaver.tools.PointcutParser.setClassLoader(PointcutParser.java:222)~[na:na]
在org.aspectj.weaver.tools.PointcutParser.(PointcutParser.java:208)~[na:na]
在org.aspectj.weaver.tools.PointcutParser.GetPointCutParsers支持SpecifiedPrimitives导出SpecifiedClassLoaderForResolution(PointcutParser.java:170)~[na:na]
在org.springframework.aop.aspectj.AspectJExpressionPointcut.initializePointcutParser(AspectJExpressionPointcut.java:242)~[na:na]
在org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:221)~[na:na]
在org.springframework.aop.aspectj.AspectJExpressionPointcut.getainpointcutexpression(AspectJExpressionPointcut.java:198)~[na:na]
在org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:177)~[na:na]
在org.springframework.aop.support.AopUtils.canApply(AopUtils.java:226)~[na:na]
在org.springframework.aop.support.AopUtils.canApply(AopUtils.java:289)~[na:na]
在org.springframework.aop.support.AopUtils.FindVisorsThatCanApp(AopUtils.java:321)~[na:na]
可在org.springframework.aop.framework.autoproxy.AbstractAdvisorutoProxyCreator.FindVisors上应用(AbstractAdvisorutoProxyCreator.java:128)~[com.fon.footballfantasy.footballfantasy应用程序:5.3.1]
在org.springframework.aop.framework.autoproxy.AbstractAdvisorutoProxyCreator.findEligibleAdvisors(AbstractAdvisorutoProxyCreator.java:97)~[com.fon.footballfantasy.footballfantasy应用程序:5.3.1]
在org.springframework.aop.framework.autoproxy.AbstractAdvisorutoProxyCreator.GetAdvices和AdvisorForBean(AbstractAdvisorutoProxyCreator.java:78)~[com.fon.footballfantasy.footballfantasy应用程序:5.3.1]
在org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:337)~[com.fon.footballfantasy.footballfantasy应用程序:5.3.1]
在org.springframework.aop.framework.autoproxy.AbstractAutoProxy Creator.postProcessAfterInitialization(AbstractAutoProxy Creator.java:289)~[com.fon.footballfantasy.footballfantasy应用程序:5.3.1]
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:444)~[na:na]
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792)~[na:na]
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609)~[na:na]
... 省略37个公共框架
我想问题是SpringAOP运行时编织,但如何解决呢

编辑:
谢谢你的回答! 很抱歉没有提前提供更多信息。
示例项目:
我按照官方文档的入门步骤创建本机映像

我尝试了0.8.3和0.8.5两个版本。

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


所以是的,因为SpringAOP可以在很晚的时候完成,随着配置的解决,可能会出现问题。请看一看这个项目,了解将Spring项目构建为本机映像的最新支持,但我记得,我们现在没有Spring AOP的示例。我鼓励您针对该项目提出问题,包括一个示例项目,该项目表明您的具体问题是非常宝贵的。您还没有提到您现在如何创建本机映像,这可能会影响我的建议。我认为在这一过程中稍早进行一些分析/编织可能会使它起作用,但还没有进入这一领域。

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

所以是的,因为SpringAOP可以在很晚的时候完成,随着配置的解决,可能会出现问题。请看一看这个项目,了解将Spring项目构建为本机映像的最新支持,但我记得,我们现在没有Spring AOP的示例。我鼓励你提高工资