微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何基于参数创建Spring Boot Bean

如何解决如何基于参数创建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

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

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

解决方法

您可以自动装配ApplicationArguments bean来读取传递给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 { }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?