Встречается на собеседованиях • сегодня
Как связаны Self-Injection и Spring AOP
Self-Injection в Spring — это ситуация, когда бин внедряет сам себя (например, через @Autowired). Это может понадобиться для использования Spring AOP, так как проксирование работает только через вызовы методов бина извне.
Пример:
java
@Service
public class MyService {
@Autowired
private MyService self; // Self-Injection
text
@Transactional
public void outer() {
self.inner(); // Без self вызов inner() не будет проксирован!
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void inner() {
// Логика
}}
text
**Почему так?**
Spring AOP использует прокси-объекты. При вызове `inner()` напрямую (без `self`) метод выполняется в оригинальном объекте, минуя прокси, и аннотации (например, `@Transactional`) игнорируются. Self-Injection обходит это ограничение.
**Альтернативы:**
- Использовать `AopContext.currentProxy()` (менее удобно).
- Перейти на AspectJ (но это сложнее).
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы