提问者:小点点

使用ByteBuddy生成Spring Boot配置


我正在尝试生成Spring Boot配置代码来解决这个问题。这是我到目前为止得到的:

//@Configuration <- trying to add this through BB
public class GeneratedConfigBase {
  @Bean
  public Object hello() {
    System.out.println("hello");
    return new Object();
  }
}

@SpringBootApplication
public class TestApp {
  public static void main(String[] args) throws Exception {
    generateConf();
    SpringApplication.run(TestApp.class, args);
  }

  private static void generateConf() {
    new ByteBuddy()
        .subclass(GeneratedConfigBase.class)
        .name("com.example.GeneratedConfig")
        .annotateType(AnnotationDescription.Builder.ofType(Configuration.class).build())
        .make()
        .load(TestApp.class.getClassLoader(), ClassLoadingStrategy.UsingLookup.of(
            MethodHandles.privateLookupIn(GeneratedConfigBase.class, MethodHandles.lookup()
        ));
  }
}

上面的内容在运行应用程序时不会打印“hello”。我完全不确定load()部分,但是Spring Boot可能出于多种原因无法获取配置。任何见解都将不胜感激。


共1个答案

匿名用户

Spring通过遍历类文件来扫描类路径。通过这些扫描,您生成的类将不可见,它没有类文件表示。

要使您的类可见,您需要显式注册它。I thibk Spring为此目的提供了一个构建器,您目前在其中运行一个主类。