Comments 10
Спасибо, интересная статья.
А мой любимый вопрос такой: расскажите про проксирование в Спринге))
А мой любимый вопрос такой: расскажите про проксирование в Спринге))
а вам нужен специалист знающий ядро спринга? у вас есть задачи на переписывание/изменение ядра спринга? Или вы пишете свой аналог спринга?
ИЛИ
ваши задачи это просто реализация бизнес логики и вы хотите просто поумничать?
ИЛИ
ваши задачи это просто реализация бизнес логики и вы хотите просто поумничать?
При чем здесь переписывание спринга? Понимать что такое проксирование нужно хотя бы при отладке, когда видишь всякие прокси-надстройки поверх своих классов, например когда дебажишь транзакции или секьюрити на бизнесовые методы, и т.д. Это всё базовые возможности спринга.
да и в целом, понимая, что «магия» спринга, например, при работе с транзакциями, осуществляется за счет прокси-классов, можно отсечь глупые ошибки с вызовом transactional-метода из того же класса
Знать инструмент, с которым работаешь, всегда полезно. Тогда будет меньше магии и больше понимания, что делают высокоуровневые конструкции, чтобы не делать глупых и неоптимальных вещей.
Очень полезная статья для новичков. Большое спасибо!
Мой любимый развод спрингера, JEE-шника и любого фреймворкера на собеседовании: можно ли использовать в приложении следующий код:
@Singleton
public class MyService {
@PersistenceContext
EntityManager entityManager;
@Transactional
public void doSomething() {
// используем EntityManager
}
}
После недолгого обдумывания поциент соглашается — "а почему нет"? На что я обращаю внимание, что бин у нас Singleton, и задаю следующие наводящие вопросы:
- Сколько раз и когда инъектится EntityManager в поле singleton-бина? Правильный ответ: 1, при создании самого бина.
- В JPA EntityManager — это thread-safe объект? Правильный ответ: НЕТ.
- Может ли здесь возникнуть конфликт, когда две параллельные транзакции обращаются к одному не thread-safe объекту EntityManager? Правильный ответ: НЕТ, т.к. в данном случае в поле entityManager инъектируется обертка над реальным объектом EntityManager, который в свою очередь привязан к текущей транзакции. Управление осуществляется контейнером/фреймворком.
Большинство валится на третьем вопросе, отвечая, что код некорректен. Ну и как бы общий вопрос на понимание DI:
- Когда бин с областью "prototype" инъектируется в "singleton", какую область видимости будет он иметь? Правильный ответ: SINGLETON за исключением, если въявную не включен proxying (ScopedProxyMode, etc).
Sign up to leave a comment.
11 вопросов на собеседовании по Spring Boot, которые заставляют задуматься