Spring - @Configurable 类 在外部 JAR 中

Spring - @Configurable classes in external JAR

我想为我的域 classes 使用 spring 依赖注入,它们可能不是在 spring 上下文中创建的。这就是为什么我用 @Configurable 注释对这些 classes 进行了注释,并且我尝试设置加载时间编织。我的 spring 配置是:

@SpringBootApplication
@EnableSpringConfigured
@EnableAspectJAutoProxy
@EnableCaching(mode = AdviceMode.ASPECTJ)
@EnableLoadTimeWeaving
public class WebApplication extends WebMvcConfigurerAdapter

这工作正常,但前提是我的 @Configurable classes 与我的主 Spring 引导应用程序位于同一 JAR 中。但是我想在 JAR 中添加我的 @Configurable 域 classes,作为主应用程序的依赖项添加。

我试过了,但看起来加载时间编织不适用于外部 JAR。您对如何解决这个问题有什么建议吗?

编辑
我已将 -verbose:class 添加到我的 JVM 选项中,并且我发现在配置和初始化 LoadTimeWeaving 之前,来自外部 JAR 的 classes 由 class 加载程序加载。并且 class 不在外部 JAR 中的 es 在需要时加载,即在 LoadTimeWeaving init 之后。

所以基本上我的问题是:
是否可以在加载外部 JAR 之前初始化 LTW?或者是否可以在配置 LTW 后重新加载(或进行 AspectJ 增强)classes?

编辑 2
我发现了为什么我的 classes 来自外部 jar 在 LTW init 之前加载的原因。这是因为这些 classes 也被注释了 @Entity 注释。因此,它们在 LTW 初始化之前发生的休眠初始化期间加载。

所以最后的问题是:D
如何假设 LTW 在休眠(可能还有其他)初始化之前初始化?

好的,我有办法。 :) 令我难过的问题是 spring bean 初始化的顺序。所以我只需要确保在休眠之前初始化加载时间编织器。简单地将 LoadTimeWeaver 注入我的配置 class 是解决方法:

    @Autowired
    private LoadTimeWeaver loadTimeWeaver;

编辑
另一种解决方案是添加 aspectjweaver.jar 作为 javaagent 除了 spring-instrument.