|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Всем привет! Приложение Spring boot. Создал класс реализующий ServletContextListener. Почему и в режиме Debug и в режиме Run метод contextInitialized(ServletContextEvent sce) выполняется два раза? При повторном выполнении контекст остается таким же, что и после первого выполнения метода. Это мешает тестированию приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 16:00 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Molasar Всем привет! Приложение Spring boot. Создал класс реализующий ServletContextListener. Почему и в режиме Debug и в режиме Run метод contextInitialized(ServletContextEvent sce) выполняется два раза? При повторном выполнении контекст остается таким же, что и после первого выполнения метода. Это мешает тестированию приложения. Потому что контекст создается два раза, очевидно же? Как можно без кода, без аннотаций что-то вменяемое ответить? И вообще зачем спрашивать если можно продебажить? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 16:13 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
забыл ник, contextInitialized - выводится дважды в консоле Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 16:53 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Приложение запускается под Tomcat автор . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.3.2.RELEASE) 2020-08-13 16:51:26.243 INFO 2404 --- [ost-startStop-1] com.example.demo.ServletInitializer : Starting ServletInitializer on A-PC with PID 2404 (C:\Dev\Code\Testing\JMX\InitializrSpringbootProject\target\demo-0.0.1-SNAPSHOT\WEB-INF\classes started by A in C:\Dev\apache-tomcat-8\bin) 2020-08-13 16:51:26.250 INFO 2404 --- [ost-startStop-1] com.example.demo.ServletInitializer : No active profile set, falling back to default profiles: default 2020-08-13 16:51:27.405 INFO 2404 --- [ost-startStop-1] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1042 ms 2020-08-13 16:51:28.080 INFO 2404 --- [ost-startStop-1] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2020-08-13 16:51:28.363 INFO 2404 --- [ost-startStop-1] com.example.demo.ServletInitializer : Started ServletInitializer in 3.012 seconds (JVM running for 6.303) 13-Aug-2020 16:51:28.406 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of deployment descriptor [C:\Dev\apache-tomcat-8\conf\Catalina\localhost\demo.xml] has finished in [5В 236] ms 13-Aug-2020 16:51:28.408 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Установка веб приложения РІ папку [C:\Dev\apache-tomcat-8\webapps\docs] contextInitialized 13-Aug-2020 16:51:28.449 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [C:\Dev\apache-tomcat-8\webapps\docs] has finished in [41] ms 13-Aug-2020 16:51:28.449 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Установка веб приложения РІ папку [C:\Dev\apache-tomcat-8\webapps\examples] 13-Aug-2020 16:51:28.734 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [C:\Dev\apache-tomcat-8\webapps\examples] has finished in [285] ms 13-Aug-2020 16:51:28.734 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Установка веб приложения РІ папку [C:\Dev\apache-tomcat-8\webapps\host-manager] 13-Aug-2020 16:51:28.764 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [C:\Dev\apache-tomcat-8\webapps\host-manager] has finished in [30] ms 13-Aug-2020 16:51:28.765 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Установка веб приложения РІ папку [C:\Dev\apache-tomcat-8\webapps\manager] 13-Aug-2020 16:51:28.799 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [C:\Dev\apache-tomcat-8\webapps\manager] has finished in [35] ms 13-Aug-2020 16:51:28.804 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8081"] 13-Aug-2020 16:51:28.820 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 5719 ms 2020-08-13 16:51:29.972 INFO 2404 --- [nio-8081-exec-9] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' contextDestroyed 13-Aug-2020 16:51:30.485 INFO [http-nio-8081-exec-9] org.apache.catalina.startup.HostConfig.undeploy Undeploying context [/demo] 13-Aug-2020 16:51:30.496 INFO [http-nio-8081-exec-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying deployment descriptor [C:\Dev\apache-tomcat-8\conf\Catalina\localhost\demo.xml] 13-Aug-2020 16:51:31.773 INFO [http-nio-8081-exec-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.3.2.RELEASE) 2020-08-13 16:51:32.666 INFO 2404 --- [nio-8081-exec-1] com.example.demo.ServletInitializer : Starting ServletInitializer on A-PC with PID 2404 (C:\Dev\Code\Testing\JMX\InitializrSpringbootProject\target\demo-0.0.1-SNAPSHOT\WEB-INF\classes started by A in C:\Dev\apache-tomcat-8\bin) 2020-08-13 16:51:32.670 INFO 2404 --- [nio-8081-exec-1] com.example.demo.ServletInitializer : No active profile set, falling back to default profiles: default 2020-08-13 16:51:33.465 INFO 2404 --- [nio-8081-exec-1] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 733 ms 2020-08-13 16:51:34.031 INFO 2404 --- [nio-8081-exec-1] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2020-08-13 16:51:34.240 INFO 2404 --- [nio-8081-exec-1] com.example.demo.ServletInitializer : Started ServletInitializer in 2.204 seconds (JVM running for 12.18) contextInitialized 13-Aug-2020 16:51:34.254 INFO [http-nio-8081-exec-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of deployment descriptor [C:\Dev\apache-tomcat-8\conf\Catalina\localhost\demo.xml] has finished in [3В 758] ms 13-Aug-2020 16:51:34.263 INFO [http-nio-8081-exec-4] org.apache.catalina.util.LifecycleBase.start The start() method was called on component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/demo]] after start() had already been called. The second call will be ignored. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 16:57 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Точнее приложение запускается через NetBeans, сервер Tomcat ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 17:00 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
В логах два старта SpringBootApplication. Вот и будет все по два раза. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 18:13 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mayton В логах два старта SpringBootApplication. Вот и будет все по два раза. Для чего происходит 2-ой запуск? Как сделать один запуск? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 10:31 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
это Котяра Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
это Бутяра Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 10:57 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
SpringBoot - это вобщем связующий клей для фреймворков. Он сам по себе мало чего делает. Но он может искусственно поднять Tomcat в качестве веб-контейнера для того чтоб обеспечить деятельность http-листенеров. Собственно пуск Томката всегда видно в логах. Только детализацию надо включить. Мы как-то поднимали голосование по веб-серверам и Томкат как эталонная реализация (и бесплатная) HTTP - занял у нас первое место по частоте использований. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 18:01 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79, чем старше ты будешь становиться - тем больше ты будешь искать простых решений сложных зада. SpringBoot - это сложый стек технологий. Хотя внешняя обёртка (то что называется бут) была создана специально чтобы облегчить процесс бут-страпа приложений от хеллоу-ворд до ентерпрайза. Те кто это делали - своего добились. К сожалению комплексность под капотом не ушла а осталась. И ты можешь очень долго использовать бут но при этом практически будешь не в состоянии пофиксить его-же внутреннию бутовую ошибку например. Тот факт что ты в восторге от бута - это просто внешнее эмоциональное состояние какраз от его внешнего дизайна. Не позволяй себе очаровываться. Инженер должен быть хладнокровным. Как анатом. Копни глубже. Почитай как и зачем он использует cglib например. Это интересная тема. Хорошо прокачивает общие знания. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 19:05 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79, какой я тебе олдскул? Тебе сорокет? Ну и я недалеко ушел. Так что нечего тут в молодого играть. Я прекрасно вижу твои трудности и как ты рассуждаешь. У тебя точка зрения менятеся от работы к работе. У тебя мудрость настанет тогда, когда перестанешь идеализировать Spring или "прятаться в домике" бизнес-кодера. Если хочешь расти в карьере - будешь учить bash, python, groovy, kotlin, scala, и тысячи диалектов конфигураций теже Докеры. И тот-же SQL учить придется. Будет задача перформанса. И некому ее решать. Будешь сам решать. Нет такого девопса который тебе SQL напишет. И нет такого архитектора который за тебя напишет конфигурации gradle, maven. И никто бинарные форматы сериализаций за тебя читать не будет. Ты должен уметь глазами читать hex-codes. Это полезный скил по жизни. Как у самурая - владение клинком. Так и у разработчика способность читать целые числа хотя-бы в трех системах счисления. И Linux знать надо чтоб обосновать и выбрать конфигурацию. Кто за тебя ее выберет? Заказчик что-ли? Он невкурсе? И амазон облако соптимизировать по биллинку тоже тебе надо. Видишь сколько всего надо? А ты хочешь отсидеться в кустах. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 23:54 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79 В принципе если ты знаешь историю- то поймешь ,что именно разделение труда и есть основной двигатель прогресса. Исторически разделение труда стартовало на относительно простых технологических процессах. Типа "девятнадцать операций для изготовления булавки". Только потом подтянулось разделение труда в инженерной и научной сфере, что позволило создавать неимоверно сложные процессы и технологии, которые уже невозможно уложить в голове отдельно взятого человека. Программирование, в некотором смысле, шло в обратном направлении: академически простые элементарные операции (машина Тьюринга - примитивна), которые сразу объединены в сложнейшие комплексы. Современные попытки "индустриализации" программирования - скорее попытки управлять этой сложностью, а не реальное разделение труда. Просто потому, что в "нормальной" индустрии даже простой рабочий неплохо понимает общий процесс: что, как, зачем и почему. А в программировании этого понимания нет до сих - большая и местами дурно пахнущая куча механик и эвристик: "исторически сложилось". ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 06:19 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Molasar Точнее приложение запускается через NetBeans, сервер Tomcat ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 14:50 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79 mayton Zzz79, какой я тебе олдскул? Тебе сорокет? Ну и я недалеко ушел. я то новая водлна - не успел застать конфигрустов слава богу) Ахахах. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 20:02 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79 В некоторых конторах собственно ничего и не поменялось- бекэнд разраб в их понимании должен уметь и сервак настроить и порты прокинуть и Тимсити до кучи. В нормальных конторах,где процесс выстроен правильно такого просто априори быть не может,там дев опс выполняет свои задачи,фронт свои,бек свои. Во тип! не смог в коте приложение развернуть и поэтому решил что этим кто-то другой должен заниматься ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 20:54 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79 В некоторых конторах ... В нормальных конторах ... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2020, 06:38 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Zzz79 В некоторых конторах ... В нормальных конторах ... Чем сильнее специализация, тем развитее экономика. Так что все норм. Раньше программисты, перед тем чем программировать паяли себе компьютер. :-) Понятно, что знать лучше чем не знать. Но если знаниями постоянно не пользоваться они забываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 08:06 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mad_nazgul Чем сильнее специализация, тем развитее экономика Ключевое в современной экономике - разделение труда. Специализация - (уже) пройденный этап. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 10:30 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
А по моему, современному программисту просто не хватает философии. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 11:07 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Чтобы браться за философию надо бы подтянуть, для начала, общее образование. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 13:18 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79 сейчас на прод стенд выделяют даже в слабонагруженой системе как у нас 16 гиг озу-а Я вот вижу рабочие системы, где виртуальной машине выделено 4-8ГБ. И больше не будет. Вообще или в обозримом будущем. P.S. Зарубите уже на своём снобском носу, что не вы, а бизнес решает - сколько денег выделить на ресурсы. А уж сколько ресурсов вы сможете купить на эти деньги - уже совсем другая история. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 13:57 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79 Пример с волгой мне напомнил одного товарища,который до сих пор против ломбок,он как только эти анотации видит у его пар из ушей идет- тоже олд скул прогер далеко за 50 .Пытался с ним спорить,что все это тонны гетеров,сетеров и конструкторов и билдеров просто захламляют класс,делают его не читаемым- бесполезно обьяснять "там же все равно будет этот код") ИМХО lombok не особо нужен. Как минимум в IDEA и Eclipse можно создавать getter/setter и пр. через автогенерацию. Вместо lombok можно взять Kotlin. ;-) У lombok есть сайдэфекты, при работе со Spring [ [spoiler]url= ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 14:12 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mad_nazgul У lombok есть сайдэфекты, при работе со Spring ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 14:22 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Андрей Панфилов тратить час я так понимаю речь о 40-й минуте и дальше ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 14:53 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Андрей Панфилов очередные имбецилы? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 15:41 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
[quote=Zzz79] [quote=mad_nazgul] ИМХО lombok не особо нужен. Как минимум в IDEA и Eclipse можно создавать getter/setter и пр. через автогенерацию. Вместо lombok можно взять Kotlin. ;-) У lombok есть сайдэфекты, при работе со Spring [ [spoiler] url= ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 16:37 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Ломбок - это скотч которым сбоку к проекту что-то "примотали". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 18:10 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Кстати предлагаю Джону Смиту вместо ответа на вопрос порассуждать чем POJO объекты отличаются от всех остальных. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 20:13 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79 mayton Кстати предлагаю Джону Смиту вместо ответа на вопрос порассуждать чем POJO объекты отличаются от всех остальных. первым делом джон бы спросил,майтон - ты против договоренностей и раз так обьясни что такое POJO в твоем понимании) Ты хочешь против меня использовать приёмы риторики. Не надо этого делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 20:58 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79 mayton Ломбок - это скотч которым сбоку к проекту что-то "примотали". нифига ты не прав) я думаю ты же понимаешь что такое ломбок в реальностти) скомпилированый код выглядит так же ,как еслм бы ты нагадил там в ручную гет/сет + прочая лажа так зачем нам в исходниках вся эта чулочная фабрикпс.олды как бы вы не сопротивлялись ломбок уже на проде крупнейших банков)я могу сказать что есть он в ГПБ и Сбере,Альфе и херовой тонне их партнеров) тоесть можно сколько угодно пукать в воздух - но бут ,ломбок и ОРМ уже тут и давно тут) хотите по другому- вам на кворк) Зачем мне бинарник. Я после того как отдал его кастомеру - просто забываю о нем. Мне исходный код важен. Я с ним работаю. И я плачу своим личным временем за все технические долги. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 21:21 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Вот поэтому я и не люблю бины. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 22:25 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79 Ну и чем тебя не устраивает исходник с ломбоком?ты же знаешь что там будет таже портянка С ломбоком, проблема в том, что он работает во время компиляции. Поэтому рефлексия может работать странно. Плюс начиная с 11 версии вообще рефлексия была поломана. Так что как себя ведет ломбок на версиях джавы выше 11 не понятно. И как бы особого удобства ломбок не приносит. Иногда на сложных многомодульных проектах у ИДЕЯ от ломбока может "сносить крышу". Плюс плагин для ломобока иногда не поспевает за EAP IDEA. Если говорить об удобствах, то имеет смысл как альтернативу ломбок посмотреть на Котлин. Data Class + лямбда apply решают все кейсы ломбока, при этом сам Котлин дает кучу "плюшек". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2020, 06:50 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mad_nazgul С ломбоком, проблема в том, что он работает во время компиляции. Поэтому рефлексия может работать странно. Плюс начиная с 11 версии вообще рефлексия была поломана. Так что как себя ведет ломбок на версиях джавы выше 11 не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2020, 09:28 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Андрей Панфилов Чет боюсь рефлексия относится к lombok таким же образом как и спринг к особенностям конкретного сериализатора, т.е. никак. В ссылке, которой я давал, как раз разбирается кейс, когда Spring ведет себя странно из-за рефлексии и ломбока. Ломбок работает, не так однозначно, как хотелось бы. Точно так же как и Spring. А уж когда их "скрещивают", может быть все что угодно. :-) Это, кстати, касается и Kotlin. По началу Spring работал с Kotlin очень странно. Сейчас нормально. Может быть с ломбоком, сейчас проблем в Spring нет. Я сейчас не использую ломбок, т.к. использую Kotlin. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 07:39 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mad_nazgul В ссылке, которой я давал, как раз разбирается кейс, когда Spring ведет себя странно из-за рефлексии и ломбока. Ломбок работает, не так однозначно, как хотелось бы. Точно так же как и Spring. А уж когда их "скрещивают", может быть все что угодно. :-) Это, кстати, касается и Kotlin. По началу Spring работал с Kotlin очень странно. Сейчас нормально. Может быть с ломбоком, сейчас проблем в Spring нет. Я сейчас не использую ломбок, т.к. использую Kotlin. Прямо откровение за откровением можно сказать... По ссылке что вы привели происходит следующее: два имбецила впихивают бизнес-логику в POJO и удивляются чего это оно работает не так как ожидается - так делать не нужно, потому то есть более правильные способы, это раз. Если попытаться разобраться в "проблеме" более глубже, то можно найти например такое обсуждение: https://github.com/FasterXML/jackson-databind/issues/1239, суть его примерно в следующем: в джексоне этих аннотаций для поддержки десериализации понакручено столько, что толком разобраться в том что происходит при включении тех или иных модулей и/или смене версий вообще невозможно, вывод отсюда такой: не нужно ничего накручивать вообще, а чем проще тем лучше. Lombok к поведению джексона здесь вообще никаким образом: они добавили java.beans.ConstructorProperties в далеком 2010 году, потому что в то время вообще не было никакой возможности узнать имена параметров к конструктора (java.lang.reflect.Executable#getParameters появился только в 1.8) Spring ко всему этому имеет единственное отношение: имбецилы из бута (привет Стасу) зачем-то тащат lombok (у которого scope вообще должен быть provided) в spring-boot-dependencies, а хомячки радостно этот spring-boot-dependencies себе в проекты импортируют, как итог при смене версии бута еще и байткод начинает другой генерироваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 10:19 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Вот об этом и речь. Нафига использовать ломбок, если он не облегчает жизнь а усложняет. Нужно уметь его готовить чтобы использовать. При этом PROFIT'а от него 0. Все что он может делается в IDE, без каких либо проблем. <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 15:36 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mad_nazgul Нафига использовать ломбок, если он не облегчает жизнь а усложняет. с фига ли он не облегчает? еще как облегчает mad_nazgul Нужно уметь его готовить чтобы использовать что там уметь? просто знать что он генерит? mad_nazgul При этом PROFIT'а от него 0 профит есть - меньше бессмысленного кода, отвлекающего от сути. mad_nazgul Все что он может делается в IDE, без каких либо проблем. проблемы есть - нужны плагины (для того же builder, fluent, etc) и в итоге снова тонны бессмысленного кода ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 16:01 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Билдер не имеет мотивации к использованию в языках программирования где нет конструктора или он необязателен но тем не менее вы можете спокойно инициализировать все поля. И хотя контракт билдера может быть чуть сложнее чем просто инициализация полей - тем не менее. Я думаю что в этих языках вы билдера просто не найдете. Поэтому не стал бы идеализировать билдер или выделять его в какую-то особу категорию. IDE позволяет поставить плагин которые печет билдеры как печенюшки? Позволяет. Так-же как мы поступаем с toString, hashCode, equals. Мы на 99% доверяем IDE процесс кодо-генерации и лишь слегка делаем измеенения там где нас что-то не устроило. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 16:10 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mayton Билдер не имеет мотивации к использованию в языках программирования где нет конструктора или он необязателен но тем не менее вы можете спокойно инициализировать все поля. И хотя контракт билдера может быть чуть сложнее чем просто инициализация полей - тем не менее. Я думаю что в этих языках вы билдера просто не найдете. Поэтому не стал бы идеализировать билдер или выделять его в какую-то особу категорию. [закатывает глаза], 3 абзаца текста... в каком месте я его идеализирую и выделяю в особую категорию ? Это был просто пример конструкции, требующей массы довольно тривиального кода. Один из. mayton IDE позволяет поставить плагин которые печет билдеры как печенюшки? Позволяет. Так-же как мы поступаем с toString, hashCode, equals. Мы на 99% доверяем IDE процесс кодо-генерации и лишь слегка делаем измеенения там где нас что-то не устроило. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 17:10 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
chpasha, да ладно не переживай так. Я просто забыл добавить что это грёбаное IMHO. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 17:23 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mad_nazgul Вот об этом и речь. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 18:14 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Zzz79 не понимаю противников ломбока ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 01:45 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Андрей Панфилов mad_nazgul Вот об этом и речь. Я не утверждал, что ломбок ломает все и вся. Я говорил, что при использовании ломбок могут возникнуть проблемы. И что решение проблем не стоит того PROFIT, который дает ломбок. Вы же подвердили мои слова, сказав, что ломбок надо уметь готовить. Возникает вопрос - "Зачем?" Зачем уметь готовить ломбок, когда можно его не использовать? Все что "умеет" ломбок, делает кодогенерация в IDE. При этом никаких побочных эффектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 06:18 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mad_nazgul Я говорил, что при использовании ломбок могут возникнуть проблемы. проблемы могут возникнуть в любой момент с чем угодно. например с кривыми руками mad_nazgul Вы же подвердили мои слова, сказав, что ломбок надо уметь готовить. вообще-то он написал совершенно противоположное. a готовить таки надо уметь то, у чего проблемы могут возникнуть и без ломбока. mad_nazgul И что решение проблем не стоит того PROFIT, который дает ломбок. стоит, т.к. профит в плане удаления boilerplate в разы больше по сравнению с введением в язык лямбд, var и stream-ов вместе взятых. mad_nazgul Возникает вопрос - "Зачем?" мы, по-моему, ходим кругами. mad_nazgul Все что "умеет" ломбок ломбок умеет больше mad_nazgul кодогенерация в IDE. кодогенерация бесполезного кода (тут прозвучала цифра 99% с которой я согласен) в исходник идет в задницу ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 09:47 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mad_nazgul Все что "умеет" ломбок, делает кодогенерация в IDE. При этом никаких побочных эффектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 15:27 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
chpasha кодогенерация бесполезного кода (тут прозвучала цифра 99% с которой я согласен) в исходник идет в задницу Так зачем использовать Java, когда можно использовать Kotlin, где эта кодогенерация в принципе не нужна? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 07:28 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
Андрей Панфилов mad_nazgul Все что "умеет" ломбок, делает кодогенерация в IDE. При этом никаких побочных эффектов. Хороший аргумент. Просто я данную проблему обычно решаю через codestyle и ревью кода. Но если для вас, это преимущество является решающим, то да. Для вас ломбок удобная вещь. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 07:35 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mad_nazgul Так зачем использовать Java, когда можно использовать Kotlin, где эта кодогенерация в принципе не нужна? заранее прошу прощения за аналогию: а зачем вытирать попу бумажкой, если есть биде ;) ? Нет возможности пользоваться котлин, по-крайней мере на ява-проектах. Да и на андроид-проектах - переписывать, то что есть, смысла нет, мешать в кучу - будет бардак. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 09:36 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
chpasha mad_nazgul Так зачем использовать Java, когда можно использовать Kotlin, где эта кодогенерация в принципе не нужна? заранее прошу прощения за аналогию: а зачем вытирать попу бумажкой, если есть биде ;) ? Нет возможности пользоваться котлин, по-крайней мере на ява-проектах. Да и на андроид-проектах - переписывать, то что есть, смысла нет, мешать в кучу - будет бардак. ИМХО аналогия не точная. Биде это скорее Scala, а не Kotlin. Если продолжать "сортирную" аналогию. То зачем вытирать попу газеткой (Java), когда есть туалетная бумага (Kotlin) <:o) А так, Kotlin в проекте, это обычно результат договоренности. Использовать Kotlin на проекте с Java легче чем ломбок (по моему) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 13:06 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
mad_nazgul То зачем вытирать попу газеткой (Java), когда есть туалетная бумага (Kotlin) mad_nazgul А так, Kotlin в проекте, это обычно результат договоренности. вот как? не знал. mad_nazgul Использовать Kotlin на проекте с Java легче чем ломбок (по моему) понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 13:25 |
|
ServletContextListener.contextInitialized() выполнянется два раза
|
|||
---|---|---|---|
#18+
В продолжение темы Ломбока. В JDK 14 анонсирован джеб, который разрешает новый синтаксис классов. Так называемые Records. https://openjdk.java.net/jeps/359 (немного вспоминается Паскаль). Пока что они - только для финальных и иммутабельных классов. Код: java 1.
Но это уже хороший шаг чтобы избавиться от части "бойлерплейта" хотя-бы для сущностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2020, 11:18 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2120666]: |
0ms |
get settings: |
22ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
872ms |
get tp. blocked users: |
2ms |
others: | 319ms |
total: | 1295ms |
0 / 0 |