Comments 15
Регистрация классов через XML в 2018 году смотрится очень тепло и лампово.
В одном из докладов Евгения Борисова было сравнение времени поднятия контекста. И оно было не в пользу java config.
Это играло бы рояль, если контекст приходилось бы поднимать многократно, а разница в несколько даже секунд на старте приложения мало что значит, особенно если приложение призвано работать непрерывно в течение долгого времени.
Если ваше приложение на спринге взлетает дольше 30 секунд, то, сдается мне, дело явно не в том javaconfig у вас используется или xml… В общем экономия на спичках.
Сильно от ресурсов машины зависит, особенно от кол-ва доступных ядер процессора, т.к. старт спринга неплохо параллелится. У меня было такое, что одно и то же приложение запускалось на одной машине 14 сек, а на другой почти 70. При этом скорость работы после запуска субъективно была практически одинаковая на небольшой нагрузке.
70 секунд??? У нас какие-то разные спринги, наверное. Голое приложение на простом спринге с jetty в качестве контейнера запускается буквально пару секунд и почти не жрет памяти. Голое приложение на спринг-буте запускается чуть дольше, но тоже в пределах, ну, пусть, 10 секунд, и жрет 15 метров памяти, или что-то около того. Не могу представить, что должно подниматься что бы это занимало 70 секунд…
Есть 3 типа описания конфигурации:
Xml, Aннотации, java config.
Аннотации не уступаю в скорости поднятия контекста XML-ю
Xml, Aннотации, java config.
Аннотации не уступаю в скорости поднятия контекста XML-ю
Быстродействие как главный критерий выбора xml вместо кода — тут уже не лампами, а дымком от костра попахивает.
Грустно видеть такое, когда с нуля пишут какое-то приложение в продакшн в 2018 году. А еще хуже, когда смешивают спринг бут, хмл конфиг, джава конфиг и аннотации. Такой франкенштейн тоже, увы, повстречался.
LyricistBean1, LyricistBean2, ...
Act, Generate, ...
По правилам именования, названия методов и экземпляров класса (id бинов) должны начинаться с маленькой буквы.
private Lyricist lyr1;
private Lyricist lyr2;
public Stage(Lyricist lyr1, Lyricist lyr2) {
this.lyr1 = lyr1;
this.lyr2 = lyr2;
}
При внедрении через конструктор поля, в которые происходит внедрение, должны помечаться final.
Еще внедрение через конструктор помогает выявлять циклические зависимости, а чтобы не мучаться с конструктором можно использовать Lombok:
@RequiredArgsConstructor(onConstructor_ = {@Autowired})
public class Service...
Тот случай, когда «мучение» с конструктором короче, да и нагляднее :)
А можно и вовсе без autowired, если у вас один конструктор. Но лично, когда речь идет про инжект конструктор, я всегда использую Alt+Insert в Intellij. Как минимум, можно потыкать и посмотреть, какой бин и где инжектится.
А иногда бывают сложные случаи, когда несколько бинов одного класса, а вам надо заинжектить их в 3 экземпляра другого класса, и там тоже такая красивая ломбоковская конструкция не спасает.
Ломбок идеален для POJO, чтобы не писать геттеры, сеттеры и прочее, а заменить Data. Также, если логирование простое без заморочек, можно побаловать себя ломбоком, но вот такие конструкции скорее вредят, нежели помогают.
А иногда бывают сложные случаи, когда несколько бинов одного класса, а вам надо заинжектить их в 3 экземпляра другого класса, и там тоже такая красивая ломбоковская конструкция не спасает.
Ломбок идеален для POJO, чтобы не писать геттеры, сеттеры и прочее, а заменить Data. Также, если логирование простое без заморочек, можно побаловать себя ломбоком, но вот такие конструкции скорее вредят, нежели помогают.
Было бы неплохо описать разницу в методах инжекта, рассказать о том, когда все использовать. И неплохо бы соблюдать нормальный code style. Очень непривычно видеть названия методов в upper camel case. Как-то по-шарповому это.
Sign up to leave a comment.
Как я изучаю фреймворк Spring — часть 2 (помощь начинающим — дело рук самих начинающих)