我想对我的域类使用spring依赖注入,这可能不是在spring上下文中创建的。这就是我用@Configurable
注释注释这些类的原因,并尝试设置加载时间编织。我的弹簧配置是:
@SpringBootApplication
@EnableSpringConfigured
@EnableAspectJAutoProxy
@EnableCaching(mode = AdviceMode.ASPECTJ)
@EnableLoadTimeWeaving
public class WebApplication extends WebMvcConfigurerAdapter
这样可以正常工作,但前提是我的@Configurable
类与我的主要Spring Boot应用程序在同一个JAR中。但是,我希望在JAR中添加@Configurable
域类,作为主应用程序的依赖项。
我尝试了这个但看起来加载时间编织对外部JAR不起作用。您对如何解决此问题有任何建议吗?
修改
我已将-verbose:class
添加到我的JVM选项中,并且我发现在配置和初始化LoadTimeWeaving之前,类加载器会加载外部JAR中的类。不在外部JAR中的类在需要时加载,即在LoadTimeWeaving init之后加载。
基本上我的问题是:
是否可以在外部JAR加载之前初始化LTW?或者是否可以在配置LTW后重新加载(或制作AspectJ增强)类?
编辑2
我发现了在LTW init之前加载外部jar的类的原因。这是因为这些类也使用@Entity
注释进行了注释。因此,它们在休眠初始化期间加载,这在LTW init之前发生。
所以最后一个问题是:D
如何假设在休眠(可能还有其他)初始化之前初始化LTW?
答案 0 :(得分:1)
好的,我有一个解决方案。 :)因为我悲伤的问题是spring bean初始化的顺序。所以我很简单,必须确保在休眠之前初始化加载时weaver。简单地将LoadTimeWeaver注入我的配置类就是解决方法:
@Autowired
private LoadTimeWeaver loadTimeWeaver;
修改强>
另一种解决方案是在 spring-instrument 之外添加 aspectjweaver.jar 作为javaagent。