#java #spring #spring-boot
#java #spring #spring-boot
Вопрос:
У меня есть пользовательская (не spring) обработка командной строки, и я хочу создать некоторые компоненты spring, настроенные с использованием этих вычисленных параметров
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?
}
}
как я должен это передать? просто закодируйте его как строку и добавьте в аргументы? как получить к нему доступ позже в фабричном методе? или есть какой-нибудь способ внедрить компонент в контекст spring?
Комментарии:
1. docs.spring.io/spring-boot/docs/current/reference/html/… Я считаю, что это то, что вам нужно
Ответ №1:
Вы можете автоматически ApplicationArguments
подключать компонент для чтения аргументов приложения, которые были переданы 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 { }