Pull to refresh

Comments 9

В Spring-е и Java как всегда, придумали сотню невероятно сложных способов решить простейшую задачу - прочитать из файла настройки приложения.

Тонны аннотаций и конфигураций, фреймворков и библиотек, которые пересекаются между собой и работают каким-то магическим образом, или не работают.

И все это делает тоже самое что делает стандартный getProperty, без всяких фреймворков, аннотаций и конфигураций.

Properties prop = new Properties();
try(InputStream stream = new FileInputStream("application.properties")) {
    prop.load(stream);
    System.out.println(prop.getProperty("application.dog.name")
}

Вы правы, но это скорее философский вопрос подхода к разработке. Но, вообще-то, с @Value короче, чем у вас :)

Где же короче-то, наоборот длиннее, потому что переменная всегда создается, вот с@value

@Bean
class Config {
    @Value("${application.dog.name}")
    String dogName;
}
ApplicationContext context = SpringApplication.run(SpringPropertiesApplication.class, args);
System.out.println(context.getBean(Config.class).dogName);

+ 20 Мб зависимостей и медленная работа, т. к. там не умеют присваивать значения через =, там все через Reflection API

а у меня по-прежнему

Properties prop = new Properties();
try(InputStream stream = new FileInputStream("application.properties")) {
    prop.load(stream);
    System.out.println(prop.getProperty("application.dog.name")
}

без дополнительных затрат

И вы по-прежнему просто прочитали строчку с диска. Вы не валидировали ее, вы не привели ее к нужному виду, вы не доставили ее до места применения, вы не научились ее обновлять на лету, вы ее даже не объединили в группу с другими свойствами того же вида. Вы просто прочитали строчку с диска, да еще завязавшись на конкретный файл свойств.

Ваш вариант просто загрузил свойство. Спринг со всеми его наворотами позволяет валидировать, возвращать дефолты, если свойство не найдено, и еще много чего, вплоть до измененя свойства в рантайме, при чем по сети. Эти "невероятно сложные" (нет) возможности стоят того, что бы их освоить, как мне кажется.

Я бы ещё сказал в пользу фреймворков вот что. Естественно, для того, чтобы прочитать свойство из конфига, подключать тонны зависимостей - это перебор. Но если фреймворк облегчает тучу действительно сложных и/или рутинных задач, то для решения таких задач использовать его имеет смысл. А если уж подключили, то почему бы не воспользоваться более мелкими удобствами, идущими в комплекте?
Ну и опять же, не всегда разработчик свободен в выборе инструментария. Рискну предположить, что поддержка занимает гораздо больше человеко-часов чем разработка новых продуктов. А по факту Spring сейчас де-факто индустриальный стандарт в бэкенде. Так что может нравиться, может нет, но очень многим дело с ним иметь приходится. Ну и, соответственно, возникает желание понимать "откуда что берётся"...

действительно сложных и/или рутинных задач

Какие такие там сложные задачи? Задачи-то на самом деле простые, только они невероятно сложно сделаны в spring-е, вот spring и объясняет мол мы решаем сложные задачи.

Вот, например, Hello, world HTTP сервер, из каждого первого spring-примера

HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/", e -> {
    var response = "Hello, world".getBytes();
    e.sendResponseHeaders(200, response.length);
    e.getResponseBody().write(response);
    e.close();
});
server.start();

на полностью стандартной Java, без фреймворков и зависимостей. Я бы не сказал что прям супер сложно.

Прекратите уже домонстрировать невежество, даже неловко становится. К тому же


@RestController
@RequestMapping("/api")
public class HelloWorldController {

    @GetMapping("/get-hw")
    String getHelloWorld(){
        return "Hello world";
    }
}

по строчкам короче.

А почему вы демонстрируете свое превосходство над спрингом на таком примере? Может быть лучше сравнить ваш подход на реальном приложении? Там, где эксепшнхендлеры, логгинг, сбор метрик, трейсы и прочее? Ведь так и про spring-core можно сказать, что от его контекста и DI никакой пользы нет, и привести пример приложения с 5 классами...

Sign up to leave a comment.

Articles