【问题标题】:How to supply runtime generated groovy classes to Spring Boot context configuration process如何将运行时生成的 groovy 类提供给 Spring Boot 上下文配置过程
【发布时间】:2020-04-27 22:15:06
【问题描述】:

我正在从 Groovy 源代码生成类并将它们存储在 GroovyClassLoader 中。这些类有@Configuration 注释。 它们在包装a.b.c.d.e 中。 我希望他们配置我的 spring 上下文。我将线程上下文类加载器设置为 GroovyClassLoader

我的 Spring Boot 应用程序设置为扫描包 @ComponentScan("a.b.c")。 我可以确认 Spring Boot 确实在使用这个GroovyClassLoader,并且可以使用这个类加载器来获取这些生成的类。

在类生成完成后初始化上下文并将类存储在GroovyClassLoader中。

然而,Spring Boot 忽略了这些类。我怀疑组件扫描会通过存储类的 jar 和目录,而这些 生成的类没有在这些地方实现?

我应该如何将这些生成的配置类提供给 Spring Boot?

【问题讨论】:

  • 问你一个问题——如果它是运行时生成的,那么为什么不直接向 ApplicationContext 注册 bean 而不是与时间/类加载顺序作斗争?
  • @pczeus,bean 和配置(其中一些)被定义为 Groovy 类,在部署服务后以源代码的形式提供。开始时,源代码被读取并编译成类,然后才调用SpringApplication#run。所以这应该解决时间问题。

标签: spring spring-boot groovy classloader dynamic-class-creation


【解决方案1】:

由于您在启动 Spring Boot 上下文之前已经生成了类,您可以使用 SpringApplicationBuilder.sources(Class<?>...) 注册它们 方法。

【讨论】:

    猜你喜欢
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多