Spring Framework

Spring Framework #


1. Есть Spring Boot Application, он собрался. Запускаешь получившийся jar-ник. Он падает с Runtime Exception - не может внедрить зависимости: 2 кандидата на внедрение в какое-то место. Из-за чего такое может произойти? Как решить? #

2. Есть класс-сервис. Внутри 2 метода. Оба public, @Transactional. Первый метод внутри обращается ко второму. Инжектим класс из другого класса и обращаемся к первому методу. Будет ли второй метод транзакционным? После. бираем транзакцию у первого метода. Делаем такое же обращение через первый метод. Через 10 минут демо, надо, чтобы второй метод стал транзакционным #

3. Можем ли мы создать несколько синглтонов, которые будут имплемитировать один и тот же класс, но будут разные параметры? #

4. Подключаю Spring Boot Application, делаю Maven parent SpringBoot и подключаю SpringBootStarter. Веб появляется? #

5. От стартеров абстрагируемся. Хотим сделать Spring Boot приложение. Ставим @SpringBootApplication public static void main. Передаешь класс, где main. Добавляешь зависимости, стартеры и все начинает работать. От момента, как прописал зависимости и поставил аннотацию - что происходит? - Что значит идет конфигурирование приложения? #

6. Как поведёт себя запущенный проект на Spring без spring-boot-starter-web? #

7. Есть метод который помеченный @Transactional, в середине нужно сохранить промежуточный результат в отдельную таблицу даже при исключении #

8. Есть контроллер Singletone. Он торчит наружу своим API. Мы этот контроллер autowire-им в сервис. Сервис Prototype. User 10 раз дергает контроллер. Сколько будет создано сервисов? #

9. У нас есть библиотека. В ней главный интерфейс movable. У него метод move() что-то двигает. У нас есть имплементация movableImpl() этого метода. Скомпилировали, собрали war, выложили на Nexus. Другой разраб берет нашу библиотеку, использует autowired куда-то себе, у него все работает. Менеджер попросил что-то у нас переделат. Мы решили сделать movableImpl2(), там имплементация того же интерфейса movable, который autowire-ид тот разраб у себя. Какие будут проблемы? #

10. Junior developer повесил @Transactional так, что транзакция не открывается. Как он это сделал? #

11. Есть аннотация, уже написана. Когда разраб помечает свой метод этой аннотацией, происходит логирование. Как реализовать такой функционал? #

12. Приложение использует библиотеку. Библиотека реализует интерфейс. Есть две реализации бинов, одна в самой библиотеке, вторая в нашем приложении. Мы инжектим интерфейс. Как ведет себя Spring? #

13. Есть интерфейс, который реализуют несколько классов. Я пытаюсь внедрять этот интерфейс куда-нибудь как Bean. Как Spring поймет, какую реализацию выбрать? #

14. Один сервис отправил сообщение, что нужно сохранить несколько сущностей. Нужно сохранить всё или ничего. Как бы сделал процесс отката? #

15. Представим что у нас есть Транзакционный метод. В нем вначале через репозиторий делаем findOne, потом изменяем ее через save и кидаем повторный запрос findOne. Сколько запросов к БД будет выполнено? #

16. Приложение работает несколько суток, принимает HTTP трафик. Есть ли возможность в Spring закинуть туда бин, не рестартуя приложение? #

17. Spring приложение, прикручена БД. Есть требование, что нельзя хранить login, password в Application Properties в открытом виде. Они там хранятся в зашифрованном виде. Как решить проблему, чтобы Spring расшифровывал их? Токен для расшифровки хранится на локальной машине #

18. Создаем бины котрые реализовывают временный контейнер Файл. Файл, что то сохраняет и что то достает. Если закроем приложение то файл останется. Как уничтожить бин, для грамотного использования ресурсов. #

19. Как создать несколько DataSource в спринг-приложении и управлять ими? #

20. Если у нас есть несколько DataSource, создаются в нашем приложении два бина одного и того же типа. Место для инжекта только одно. Как разрулить ситуацию? #

21. Если создаем в бине обращение к ресурсу. Нужно корректно закрыть ресурс. Как это сделать? #

22. Есть standalone провайдер авторизации. KeyClock к примеру. Как сервис провалидирует этот токен? #

23. Если я поменяю Service на Component. Что-то поменяется в приложении? #

24. Можно миксовать конфигурации? Часть сделать аннотациями, а часть XML? #

25. Что если надо заинжектить интерфейс, а у меня две реализации в Context #

26. Есть Singleton Bean. Есть Request HTTP запрос. Нам надо из запроса получить хедеры и залогировать. Как можно это заинжектить? Есть ли готовые решения у Spring? #

27. Что будет если на каждый запрос будет создавать новый ApplicationContext? #

28. Что будет если будет исключение в PostConstruct #

29. Используем SpringBootApplication, а используемые Бины лежат в библиотеке. Будут ли они подтягиваться автоматически? #

30. Как без LAZY мы можем сделать ленивую загрузку бина? #

31. Есть проект. В проекте есть Kafka и БД. Указываем параметры подключения к БД. Если у нас не указаны переменные в Application Properties для БД, то нам ДатаСоурс создавать не надо. Если у нас не указаны параметры application properties то нам Бин поднимать не надо. Как тогда сделать? #

32. Если ловим OptimisticLockException, что делаем? #

33. Есть самописная аннотация. Есть метод, который реализует определенный функционал. Как сделать так, чтобы когда мы ставили нашу самописную аннотацию вызывался наш метод с прописанным функционалом. #

34. Проблема управления распределённой транзакцией. Какие есть подходы к решению? #

35. Пишем интеграционный тест, который протестирует endpont, обращение в Сервис и БД. Как на Spring написать интеграционный тест? #

36. Есть стартер и Application. В стартере определен бин датасоурс, который инжектиться аппликейшином и аппликатион с ним работает. Потом сделали вторую версию Стартера и в эту версию нужно добавить еще один бин такого же типа, чтобы в одном месте кода использовался один бин, в другом другой бин. Важно, чтобы бины были одного типа. Вопросы: 1. Как можно реализовать, чтобы использовать два бина с одинаковым типом. 2. Приложение не должно заметить изменений и должно продолжить использовать первый бин. #

37. Есть Java интерфейс, который имплементируют два класса. На каждой имплементации висит @Service. Это корректно? #

38. Когда подключаешь стартер, он подтягивает все зависимости. Если мне нужен стартер, но одна зависимость в нем не нужна. А переписывать стартер не хочется, что делать? #

39. Если заменить Configuration на Component бины не будут создаваться? #

40. Есть большое приложение. Много классов, контроллеров, сервисных слоев. В большую часть этих слоев инжектится бин, созданный из какого-то библиотечного класса, который мы менять не можем. Этот бин везде используем, он создан через Java конфигурацию. Теперь нам надо создать еще один такой же бин, но с другими параметрами. Хотим новый бин использовать в новом сервисе. А в старых местах должен инжектиться старый бин. Как это развязать? Хотим иметь два Singleton #

41. Есть наша инфраструктурная аннотация, которая логирует Rest контроллеры (@RestLogger). Мы ее везде вешаем, но иногда забываем. Можно ли сделать, чтобы при старте приложения Spring сам проверил, что на всех классах, помеченных @RestController есть @RestLogger? И, если где-то не висит, то деплой падает с понятной ошибкой #

42. Подключаешь старый проект через зависимости к своему проекту. Надо, чтобы все бины из старого проекта попали в Spring context. Как это сделать? #

43. Две транзакции хотят обновить одну и туже строку. Что будет происходить? #

44. Если первая транзакция захватила объект для изменения и изменила его. Вторая транзакция на этом объекте отработает? Какие проблемы будут? Ситуация гонки за данными #

45. Как настроить зависимости бинов для разных сред разработки? Например, нужно использовать две разные БД. #

46. Как логировать бины при создании бинов? Если бинов больше сотни? #

47. Почему дефолтным выбран Singleton? Кажется, что это не удобно, раз надо обращать внимание на что-то? #

48. По всему проекту мы выбрасываем RuntimeExceptions и хотим в одном месте их ловить. Чем воспользоваться? #

49. Каким инструментом можно гарантировать, чтобы scheduler работал только в master ноде? На уровне Spring приложения #

50. Нормально ли в методе помеченном @Transactional кидать HTTP-запросы? #

51. Мне нужно в программе, чтобы бин создавался при условии, что подключена определенная библиотека. Как это реализовать? #

52. Ты подключаешь библиотеку и хочешь переопределить у этой библиотеки бин. Что для этого в библиотеке должно быть указано, чтобы ты смог это сделать? Как это возможно сделать? #

53. Две транзакции хотят обновить одну и туже строку. Что будет происходить? #

54. Есть 4 бина одного типа, мне нужно собрать их в одном месте. Как сделать? #

55. У нас есть прокси. Он добавляет действие на все методы какого-то класса. Прокси должен логгировать все вызовы методов класса. Пусть в классе есть методы B, C. Оба публичные и помечены аннотацией, чтобы прокси их обрабатывал. Другой сервис вызывает метод B, а метод B вызывает метод C. Сколько в логах будет записей? #

56. Есть сервис, в сервисе есть метод, который внутри себя вызывает метод репозитория. Над методом в сервисе я поставил @Transactional. И над методом в репозитории тоже поставил @Transactional. Вызвал метод сервиса, который внутри вызвал метод репозитория. Сколько транзакций откроется? #

57. Есть ли отличия внутри Spring, если мы применяем @Autowired к интерфейсу или обычному классу? И отличия использования @Autowired внутри конструктора или просто в методе? #

58. В контроллер пришел запрос из фронтенда и где-то в глубине сервиса упала ошибка. Хочется обработать ошибку и дать осмысленный ответ на фронтенд. Как это сделать средствами Spring? #

59. У нас есть два контроллера. Они синглтоны. Туда инжектится сервис, который прототайп. Идут запросы в эти контроллеры, которые обращаются к сервису. Сколько экземпляров сервиса будет? #

60. У нас есть бин A, который нужен в бине B и наоборот - в бине B нужен бин A. Как нам такое сделать? #

61. Что Spring ищет с точки зрения Controller-а? Если мы хотим использовать @Component, что можно законфигурировать, чтобы Spring понял, что это Controller? #

62. Есть транзакционный метод. Поняли, что хотим сделать его асинхронным. Что будет, если повесим на метод сразу две аннотации: @Transactional и @Async? #

63. Есть сервис очень простой. Он читает из Kafka 2 числа. Считает сумму, складывает в Postgres. И отправляет в Kafka сообщение, что он сложил, результат записан в БД. Какие стартеры Spring Boot ты бы добавил для этого сервиса? Нужен ли Tomcat? #

64. Создается бин, какой-то метод помечен @PostConstruct и мы вешаем над этим же методом @Transactional. Что произойдет? Создастся ли бин? Будет ли транзакция? #

65. У нас есть интерфейс, есть две реализации его. Обе реализации одного интерфейса помечены @Component. При запуске приложения получаем ошибку, что Spring не знает, какой заинжектить. Как решить проблему? #

66. Есть Spring Boot приложение, много зависимостей. Мы понимаем, что какой-то Spring Boot Starter нам мешает, он не прописан в Maven, он подтянулся из сторонней библиотеки. Что сделать, чтобы конкретный Spring Boot Starter не запускался? Какие варианты? #

67. Есть класс, в нем методы a() и b(). Метод a() вызывает метод b(). На b() есть Spring аннотация любая. Будет ли аннотация работать? #

68. Класс с @Transactional, есть public методы. Внутри одного public метода на какой-то строке код выбрасывает исключение. Что произойдет? #

69. Над классом вешаю @Transactional. А потом внутри этого же класса над одним из public методов тоже вешаю @Transactional. Вызываем метод снаружи. Что происходит? Что происходит с остальными public методами этого класса? #

70. Над методом висит @Transactional. В первой половине метода что-то делаем с БД (insert, update…), а во второй половине метода видим, что у нас отрицательный баланс, а такая ситуация недопустима. Можно ли откатить изменения? #

71. У вас приложение и несколько баз данных. Можно ли в Spring Boot подключиться к двум разным базам? Как? Как настроить работу через JPA с двумя БД? Чтобы два репозитория было? #

72. Есть метод @Transactional. Внутри него я вызываю другой метод тоже @Transactional. Как сделать вложенную транзакцию? Чтобы, если внутренний метод падал, то внешняя транзакция выполнилась бы всегда. Чтобы внешняя транзакция не откатывалась в этой ситуации. Что произойдет, когда попадаем во внутренний метод, помеченный @Transactional? #

73. Можно ли в Singleton автоварить (autowir-ить) Prototype? #

74. Есть Spring контекст, в котором живет два бина: Singleton и Prototype. У Prototype есть PreDestroy метод, из которого вываливается исключение. Мы пытаемся красиво закрыть Spring контекст. Удастся ли нам это сделать? #

75. Как можно получить destroy callback бина? Например, использовать @PreDestroy. Как еще указать контексту, что какие-то методы надо вызвать при закрытии контекста? #

76. Есть Singleton. Он раз в час требует новый инстанс Prototype бина, то есть при каждом вызове определенного метода нам нужен новый инстанс Prototype бина. Как поступишь? #

77. Как создается Proxy в Spring? У тебя только main() и JDK 11. Напиши функцию, которая на вход принимает объект, а на выходе тот же объект, все методы которого модифицированы: в каждом методе сначала прописывается лог с названием этого метода #

78. У нас есть бин синглтон Box, у которого зависимость прототип Color. Как сделать так, чтобы Box был всегда один и тот же, а Color всегда разным? #

79. Механизм стартеров Spring. Иногда в application properties или в yaml файле пишем строчку cache=none, или другую имплементацию. И получаем какое-то поведение. Когда мы указываем cache=none, что происходит дальше с имплементацией этого cache manager? В pom-нике висит Spring Boot Starter, мы ожидаем, что все бины окажутся в контексте #

80. В Spring мы пишем многопоточное Java приложение, но игнорируем многопоточность. С чем это связано? Как это работает? #

81. У меня объявлен RestController, какой-то эндпоинт. И вызывается какой-то сервис. В сервисе я делаю разные хитрые валидации с расчетами. Если что-то не так я бросаю кастомный Exception: throw new MyCastomException. И вот, возникла ошибка. Если я ничего не настрою, будет 500 выходить. А я хочу настроить 400 Bad Request, и json с подробным описанием ошибки. Как это настроить в Spring? #

82. Почему дефолтный GC не чистит бины в Spring? #

83. Spring Security. Есть ли возможность настроить разные бранчи для определенной … (слово не разобрать)? Идет жесткая страшная аутентификация. И у нас подключены актуаторы. Я хочу, чтобы эти актуаторы не были покрыты этой аутентификацией #

84. Spring Security. Если в Spring Security один фильтр падает с ошибкой (настроено логирование), что при этом произойдет? Подумай логически, как работает FilterChain? Что нужно, чтобы запросы проходили, даже если возникают ошибки при логировании в фильтре FilterChain? #

85. Порассуждай, если Singleton нарушает SOLID, может привести к Race Condition, почему в Spring сплошные Singleton? #

86. У тебя есть три среды. test, dev, prod. Тебе нужно, чтобы программа вела себя по-разному в каждой из этих сред. Как это сделать? #

87. Есть Controller, в нем определен endpoint. Внутри сервис делает валидации и кидает кастомные ошибки. По умолчанию отдается 500-ая, а мы хотим красиво сделать, чтобы отдавал красивый 400-ый request, красиво json разложить. Как бы ты это настроил? #

88. Есть типичная модель, RestController, Service Repository. У сервиса метод @Transactional. Как внутри Spring происходит превращение из декларативного в оперативный #

89. У нас может быть реализовано множество интерфейсов с разными методами. Как спринг решит проблему проксирования? #

90. Какие проблемы могут возникнуть если над классом стоит @Transactional? #

91. У тебя есть бин в котором два метода. Метод один вызывает внутри себя метод два. Метод два обращается к БД. Метод два помечен @Cacheable. При вызове метода один у тебя обращение к БД идет в сто процентах из ста. Почему? #

92. Если два конструктора нужна аннотация Autowired? #

93. Является ли Spring Bean потокобезопасным? Как сделать Bean потокобезопасным? И можно ли? #

94. Хотим что-то внедрить с помощью @Autowired. В каком порядке он начинает искать подходящий бин, который надо внедрить? С чего начинает сканировать? Какие этапы может проходить? #

95. У нас огромная транзакция: 1.5 тыс строк. Где-то между нужно было вывести кусок кода из транзакции. Допустим, 300 строк в транзакции, следующие 5 вне транзакции, потом дальше снова в транзакции. Как можно это сделать? #

96. У меня есть транзакция, внутри метода создаю новый thread и в нем делаю какую-то логику. Сохранится ли транзакция в этом thread’е? #

97. Тебя попросили сделать аннотацию и сделать ее обработчик. Как ты будешь делать? На основании каких данных Spring решит, что этот класс с этим методом надо превратить в Proxy? #

98. Ты разраб, должен написать свой Proxy для Transactional. Как реализуешь: открыть транзакцию, закрыть, сделать rollback? Аннотация висит на уровне сервиса. Оригинальный метод на уровне сервиса. Там никакого Hibernate нет. Может я вообще Elasticsearch прикрутил в качестве БД. Персистентностью может выступать любая дичь. Что у меня в реализации должно быть, чтобы эта штука не зависила от реальной моей персистентности? #

99. JPA Repository. Есть UserRepository интерфейс. Делаю extends JPA Repository, и когда UserRepository в сервис свой инжекчу, вижу, что у меня появились методы save(), saveAll(), find(). Как это реализовано? Почему это срабатывает? Как именно Spring понимает, какие данные брать из БД? Под капотом? #

100. Есть дефолтные методы save() и saveAll() из JPA Repository. Почему выгоднее использовать saveAll(), а не в цикле foreach использовать save(), если хотим сохранить коллекцию Entity? #

101. Spring. Интерфейс, есть ряд реализаций. Как можно заинжектить коллекцию? И как там выстроить порядок имплементаций? Как получить имплементации в коллекции? Та же ситуация, по-другому. Есть абстракция, у нее есть несколько реализаций в виде компонентов. Нам нужно заинжектить все эти имплементации. Что сделать? #

102. Тебе надо разработать сервис построения отчетов. Надо залезать в БД. Ты создаешь бин Repository для работы с БД. В чем разница, если ты бин создашь руками в классе, или ты его заавтоваеришь? #

103. Есть твой сервис, есть репозиторий для работы с БД. Можем его через конструктор внедрит, или через setter, или через поле. С точки зрения использования репозитория в коде, будет ли разница? Ты постоянно пользуешься этим репозиторием #

104. Ты решил сам написать прокси, которая будет обрабатывать транзакционную логику. Как бы ты писал? #

105. Одна часть логики это получить значение из БД по id, а вторая это записать полученное значение. Делать это в разных транзакциях? #

106. Мы взяли сервис на Spring Starter. Все прописали. Все оформили красиво. Почему Listener не работает? #

107. Начитались умных учебников и понимаем как работает транзакции. Знаем как вызвать их в одном методе. Как убедиться, что вызываются две транзакции? #

108. Приложение работает в проде. Нам сообщают, что пароль к БД поменялся. Как нам внедрить новый пароль? #

109. Мы загрузили файл и транзакция откатилась. Когда у нас упирается физический носитель, который находится вне транзакционной модели БД. Как вы обрабатывали вещи, когда загрузили, а транзакция откатилась? #

110. Есть сервисный класс. Есть ли смысл давать сервисному классу интерфейс?. Вариант 1: Есть просто класс DocumentService. Ms gовесили на него @Service и все везде инжектим. Вариант 2: Сначала создали интерфейс DocumentService, заимплементировали класс DocumentServiceSimple, и повесили @Service. Какие плюсы и минусы второго варианта? #

111. Есть метод @Transactional. У него низкий перформанс. Посовещались, решили сделать его асинхронным. Можно ли навесить на метод кроме @Transactional еще и @Async? #

112. Есть Сервис или Компонент, который Singletone, а в него загружаем Prototype, то когда мы будет внедрять родительский компонент в другие места, нам будет внутренний объект приходить новым всегда? #

113. Если @Transactional весит одновременно и над классом и над методом, что будет? Как будет работать? #

114. Хотим сделать свой BeanPostProcessor. Есть несколько стандартных методов. Какая у них очередность? #

115. Если метод помечен Transactional и мы вызываем его через PostConstruct сработает ли транзакция? #

116. В классе postConstruct прошел. Мы зашли в метод, который транзакционный и второй медот тоже транзакционный и мы вызываем из одного другой. Сколько транзакций будет? #

117. Есть класс, который помечен @Configutation. Два метода внутри класса помечены @Bean. Если из одного метода вызываешь другой, будет таже история, что и с транзакциями или будет что-то другое? #

118. Есть библиотека, в ней мы пишем свою конфигурацию. Есть основной проект в который включаем эту библиотеку. Что нужно сделать, чтобы эта конфигурация автоматически стартовала в нашем проекте? #

119. У нас есть поток, который вызывает репозиторий. Репозиторий сохраняет что-то в базу. Т.е. в транзакции создается новый поток. Сколько будет транзакций? #

120. У интерфейса 10 реализаций. Хочу в бине сразу поработать со всеми реализациями. Вызвать метод, который отработает у всех разных реализаций. #

121. Мы указали Spring Boot Parent для Data JPA или для Security. Внутри аккумулируются несколько зависимостей. Можно провалиться через ctrl посмотреть их. Можно ли поменять версию внутри одной из зависимостей? #

122. Приложение HelloWorld. Контроллер, сервис, репозиторий. Мы на сервис повесили @Transactional. Логику делаем: какой-то SELECT, обновить какие-то поля и сделать Save. Все работает. Высоконагруженное приложение, много вызовов по REST. Потом добавили в @Transactional метод вызов стороннего сервиса, который всегда нам возвращает результат, но стал тупить и дольше возвращать результат. Что может произойти в этом случае? #

123. Без локов. Есть SELECT к БД. Метод приходит с фронта. Мы вызываем наш сервис. Обернули его в Transactional. Нужно сходить в 5 таблиц БД. Теоретически это можно сделать параллельно. Мы сделали ExecutorService, делаем там запросы в 5 репозиториев в потоках. В чем нюанс? #