我正在编写一个打包为可执行 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 中工作。