【发布时间】: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