[#] [Из песочницы] Spring AOP. Маленький вопросик с собеседования
habrabot(difrex,1) — All
2018-01-29 13:30:14


Довелось мне тут на днях побывать на очередном собеседовании. И задали мне там вот такой вот вопрос. Что на самом деле выполнится (с точки зрения транзакций), если вызвать method1()?

public class MyServiceImpl {

@Transactional
public void method1() {
//do something
method2();
}

@Transactional (propagation=Propagation.REQUIRES_NEW)
public void method2() {
//do something
}
}

Ну, мы же все умные, документацию читаем или, по крайней мере, видео выступлений Евгения Борисова смотрим. Соответственно и правильный\* ответ знаем (правильный\* — это такой, который от нас ожидает услышать тот, кто спрашивает). И звучать он должен примерно так.

«_В связи с тем, что для поддержки транзакций через аннотации используется Spring AOP, в момент вызова method1() на самом деле вызывается метод прокси объекта. Создается новая транзакция и далее происходит вызов method1() класса MyServiceImpl. А когда из method1() вызовем method2(), обращения к прокси нет, вызывается уже сразу метод нашего класса и, соответственно, никаких новых транзакций создаваться не будет_».

Но знаете, как это бывает, вроде и ответ правильный уже давно знаешь. И применяешь это знание регулярно. А вдруг раз… и неожиданно задумаешься: «_Подождите-ка, ведь если мы используем Spring AOP, то там могут создаваться прокси и через JDK, а могут и с CGLIB; а еще возможно, что CTW или LTW подключили. И что такой ответ всегда будет верен?_».

Ну что ж: интересно? Надо проверить.
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/347752/?utm_source=habrahabr&utm_medium=rss&utm_campaign=347752#habracut