Pull to refresh

Comments 15

Регистрация классов через XML в 2018 году смотрится очень тепло и лампово.
В одном из докладов Евгения Борисова было сравнение времени поднятия контекста. И оно было не в пользу java config.
Это играло бы рояль, если контекст приходилось бы поднимать многократно, а разница в несколько даже секунд на старте приложения мало что значит, особенно если приложение призвано работать непрерывно в течение долгого времени.
Нашёл.

разница в несколько даже секунд на старте приложения

может быть критична, если время на запуск лимитировано.

Например, на heroku, если через 30 секунд приложение не отзывается, то приложение убивается.
Если ваше приложение на спринге взлетает дольше 30 секунд, то, сдается мне, дело явно не в том javaconfig у вас используется или xml… В общем экономия на спичках.
Сильно от ресурсов машины зависит, особенно от кол-ва доступных ядер процессора, т.к. старт спринга неплохо параллелится. У меня было такое, что одно и то же приложение запускалось на одной машине 14 сек, а на другой почти 70. При этом скорость работы после запуска субъективно была практически одинаковая на небольшой нагрузке.
70 секунд??? У нас какие-то разные спринги, наверное. Голое приложение на простом спринге с jetty в качестве контейнера запускается буквально пару секунд и почти не жрет памяти. Голое приложение на спринг-буте запускается чуть дольше, но тоже в пределах, ну, пусть, 10 секунд, и жрет 15 метров памяти, или что-то около того. Не могу представить, что должно подниматься что бы это занимало 70 секунд…
Есть 3 типа описания конфигурации:
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. Также, если логирование простое без заморочек, можно побаловать себя ломбоком, но вот такие конструкции скорее вредят, нежели помогают.
Было бы неплохо описать разницу в методах инжекта, рассказать о том, когда все использовать. И неплохо бы соблюдать нормальный code style. Очень непривычно видеть названия методов в upper camel case. Как-то по-шарповому это.
Sign up to leave a comment.

Articles