В настоящее время у меня есть компонент, который реализует CommandLineRunner
и анализирует аргументы командной строки с помощью Commons CLI.
java -jar app.jar --host 123.123.222 --port 8080
Существует также другой компонент, Requester
, который зависит (подмножество) этих аргументов.
@Component
public class Requester
{
// host and port need to be configured once
private final String host;
private final int port;
public Requester(String host, int port)
{
this.host = host;
this.port = port;
}
public boolean doRequest(String name) throws Exception
{
String url = "http://" + host + ":" + port + "/?command=" + name;
URL obj = new URL(url);
HttpURLConnection connection = (HttpURLConnection) obj.openConnection();
int responseCode = connection.getResponseCode();
return 200 == responseCode;
}
}
Что я могу сделать для автоматической передачи настроенного Requester
в будущие компоненты?Как Spring может создавать параметризованные одноэлементные компоненты?
Одним из решений было бы использование каждого компонента, который имеет какую-либо зависимость от аргументов программы, реализующего CommandLineRunner
.Таким образом, он может анализировать аргументы программы сам, но это очень избыточный подход.Должно быть лучшее решение.