【问题标题】:Spring - @Configurable classes in external JARSpring - 外部 JAR 中的 @Configurable 类
【发布时间】:2015-02-20 18:35:53
【问题描述】:

我想为我的域类使用 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 选项中,并且我发现外部 JAR 中的类在 LoadTimeWeaving 配置和初始化之前由类加载器加载。并且在需要时加载不在外部 JAR 中的类,即在 LoadTimeWeaving 初始化之后。

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

编辑 2
我发现了为什么我的外部 jar 中的类在 LTW 初始化之前加载的原因。这是因为这些类也使用@Entity 注释进行了注释。因此,它们是在 LTW 初始化之前发生的休眠初始化期间加载的。

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

【问题讨论】:

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


    【解决方案1】:

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

        @Autowired
        private LoadTimeWeaver loadTimeWeaver;
    

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

    【讨论】:

      猜你喜欢
      • 2017-06-21
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 2015-11-28
      相关资源
      最近更新 更多