java - 如何根据参数创建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 上下文中?
解决方案
您可以自动装配ApplicationArguments
bean 以读取传递给的应用程序参数SpringApplication.run(…)
例子:
@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 { }
推荐阅读
- amazon-web-services - Gremlin 查询中的减法 (AWS Neptune)
- django - Nginx 基础认证
- teamsql - TeamSQL 的代理设置
- asp.net - JSON.parse 错误:项目发布后出现意外字符
- python-3.x - 使用 Python 请求对 DockerHub 进行 JWT 令牌身份验证
- jquery - jQuery 显示和淡入
- regex - 检查位数的正则表达式
- python - 子图中的自定义 xtick 标签
- spring-boot - Spring Boot 在服务中运行相同配置文件的多个实例
- python - Python - 记录字符串以前的内容