5

我正在编写一个打包为可执行 jar 文件的 Spring Boot Web 应用程序,我需要加载时间 AspectJ 编织。使用-javaagent对我来说不是一个选项,因为它需要我们的 DevOps 更改部署工具链,我现在不想处理。这是我的主要课程。

@SpringBootApplication
@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
public class Application extends SpringBootServletInitializer {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

  @Bean
  public LoadTimeWeaver loadTimeWeaver() {
    return new InstrumentationLoadTimeWeaver();
  }
}

这没有用。我想也许注入InstrumentationLoadTimeWeaver不能很好地与嵌入式 Tomcat 配合使用。我尝试将其替换为TomcatLoadTimeWeaver. 但结果是 spring 上下文无法加载并显示以下错误消息。

原因:java.lang.IllegalStateException:无法初始化 TomcatLoadTimeWeaver,因为 Tomcat API 类不可用

spring-boot github 问题上的这个错误得出结论,当前 AspectJ 加载时间编织不能与嵌入式 tomcat 一起使用。我的问题是为什么不可能?我想了解什么是加载时间编织机制,这使得它无法在可执行的 Spring boot web jar 中工作。

4

0 回答 0