Как стать автором
Обновить

Комментарии 8

Везде где есть спринг

Spring не обязательно в продакшене с AOP

"все решения с декораторами (включая AOP) обладают одним общим недостатком. Они могут добавлять логику только в начале и конце метода. Т.е. всюду, где мы не можем задекорировать предлагается использовать наблюдателей.

В этом смысле получается, что паттерн наблюдатель более универсальное решение, чем декоратор для задачи внедрения произвольной логики"

https://habr.com/ru/post/582588/comments/#comment_23623770

"Предлагаю рассмотреть интересную аналогию

Если к примеру взять задачу исключительно по блокировкам, то решениям с декоратором вы можете сопоставить блок synchronize {} в java, причем который вы можете добавлять только на метод целиком. Т.е. на самом деле даже получается не блок synchronize, а именно ключевое слово дополнительное к сигнатуре метода.

А решениям с наблюдателями, можно сопоставить использование ReentrantLock, которые позволяют в любом месте захватить блокировку и отпустить."

https://habr.com/ru/post/582588/comments/#comment_23628406

Все зависит от конкретных целей. Аспекты вещь полезная. Позволяют переиспользовать логику. Но они не претендуют на самое универсальное решение. Любой инструмент нужен для конкретных целей. И для проксирования АОП хорошее решение

Если у вас сквозная функциональность нужна посреди метода бизнес-логики, то стоит задуматься либо о том, реально ли это сквозная функциональность, либо грамотно ли декомпозирован код. Еще стоит задуматься, стоит ли выносить синхронизацию в сквозную функциональность. Сомнительно, что коллеги будут вам благодарны.

Спору нет, код бывает всякий, - но спринговый механизм успешно закрывает 99% кейсов. Труднее найти код, где аспектов нет. Я в курсе, что есть пуристы и сектанты, которым любой спринговый сахар как ножом по сердцу. Но в среднестатистическом приложении менеджмент транзакций - аспект, логирование запросов - аспект, обработка исключений в контроллерах - аспект.

Перформанс можно довести до максимума если использовать aspectj компилятор. Тогда аспекты будут навешиваться при компиляции без использования прокси.

Много лет назад Евгений Борисов в своем спринг потрошителе проводил перфоманс тест по использованию Spring AOP и ручному созданию динамических прокси через BeanPostProcessor + Proxy.newProxyInstance. По его результатам Spring AOP был сильно медленнее именно при вызове методов. Может кто-нибудь знает какие-то новые исследования на эту тему, поменялось ли что-то спустя время?

На этой площадке прекратились дайджесты @olegchir, даже пропал хаб Spring.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории