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 репозиториев в потоках. В чем нюанс?

124. Есть набор справочников, которыми данные обогащаем. Справочники достаточно статичные. Храним их в БД. Мы хотим один раз из БД вытащить, у себя в словаре сохранить, потом использовать. Как это проще всего в Spring сделать?

125. Если у нас бин принимает значения null, его можно заинжектить?

126. Если несколько реализаций бина. @Primary и @Qualifier не прописаны, как поведет себя @Autowired?

127. Представь, что ты инжектишь к себе в Сервис Репозиторий. В поле написал Репозиторий, положил. Сверху Автовайред над полем. Сеттер к этому полю у тебя есть. Конструктор по умолчанию в Сервисе и ты хочешь вызвать через Конструктор Репозиторий и сделать getAll. Какие подводные камни?