Spring - 外部JAR中的@Configurable类

时间:2015-02-20 18:35:53

标签: spring spring-boot aspectj load-time-weaving

我想对我的域类使用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?

1 个答案:

答案 0 :(得分:1)

好的,我有一个解决方案。 :)因为我悲伤的问题是spring bean初始化的顺序。所以我很简单,必须确保在休眠之前初始化加载时weaver。简单地将LoadTimeWeaver注入我的配置类就是解决方法:

    @Autowired
    private LoadTimeWeaver loadTimeWeaver;

修改
另一种解决方案是在 spring-instrument 之外添加 aspectjweaver.jar 作为javaagent。