0

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

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

这可以正常工作,但前提是我的@Configurable类与我的主 Spring Boot 应用程序在同一个 JAR 中。但是,我希望@Configurable在 JAR 中添加我的域类,作为主应用程序的依赖项。

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

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

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

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

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

4

1 回答 1

1

好的,我有一个解决方案。:) 我很伤心的问题是spring bean初始化的顺序。所以我必须确保加载时间编织器在休眠之前被初始化。只需将 LoadTimeWeaver 注入我的配置类就是解决方法:

    @Autowired
    private LoadTimeWeaver loadTimeWeaver;

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

于 2015-02-21T19:17:56.923 回答