首页 > 解决方案 > 如何根据参数创建spring boot bean

问题描述

我有一个自定义(非弹簧)命令行处理,我想创建一些使用该计算参数配置的弹簧豆

fun main(args: Array<String>) {
        val computed = processArgs(args)
        if (computed.xxx()) {
           runApplication<Main>(*args) // run spring app
        } else {
          do_something_without_spring(computed)
        }
}

然后我想拥有一个依赖于computed

@Configuration
class Config {
 
   @Bean
   fun createBean() {
      if (computed.xyz()) ...  // how to pass `computed` here? 
   }
}

我应该如何通过它?只需将其编码为字符串并添加到 args?以后如何在工厂方法中访问它?或者有什么方法可以将 bean 注入到 spring 上下文中?

标签: javaspringspring-boot

解决方案


您可以自动装配ApplicationArgumentsbean 以读取传递给的应用程序参数SpringApplication.run(…​)

请参阅:https ://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-application-arguments

例子:

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

@Configuration
class C {
    @Bean
    B b(ApplicationArguments args) {
        System.out.println(String.join("", args.getSourceArgs()));
        return new B();
    }
}
class B { }

推荐阅读