Spring: BPP и BFPP

В последнее время на собеседования на позицию java-backend ко мне приходят кандидаты с коммерческим опытом около 3-5+ лет.

На удивление, почти никто из них не понимает, либо же даже не слышал о BeanPostProcessor и BeanFactoryPostProcessor😨

Поэтому, словно git init commit в этом новом сообществе, я пушу вам небольшой инит пост: ♨️ Что же это за штуки такие эти ваши BPP и BFPP ♨️ Зачем и как их использовать в продакшене и пет-проектах ♨️ Как заслужить «моёувожение» на собеседовании

Что такое BPP и BFPP? BPP - это BeanPostProcessor, позволяющий вам «докрутить» бин до того, как он попадёт в IoC-контейнер. Причём вы можете навесить дополнительную логику как до инициализации самого бина, так и после неё.

BFPP - это BeanFactoryPostProcessor, позволяющий «докрутить» саму конфигурацию бина, т.е. Bean Definition, еще до того, как спринговая BeanFactory любезно создаст вам этот бин. По аналогии с BPP вы можете управлять конфигурацией бина как до инициализации, так и после.

Но зачем мне это использовать? Ответ очень простой: для некоторых задач это гораздо производительнее и красивее с точки зрения перформанса и внутреннего самоудовлетворения. Например, часто можно услышать сравнение двух подходов для решения задачи: через процессоры спринга и с помощью аспектов (AOP). С точки зрения перформанса здесь можно выделить как минимум 3 плюса процессоров над аспектами: ♨️ Модификация объектов - если надо установить объекту дополнительные свойства после его создания (но перед использованием), или же сделать инжект зависимостей, которые вы почему-то не можете сделать через конструктор, то аспекты будут дополнительно тратить ресурсы на создание и управление прокси-объектами. ♨️ Специфичная логика - если вам надо изменить поведение методов без изменения исходного кода (или же получать доступ к внутреннему состоянию объекта), потому что аспекты «облагородят» ваши объекты дополнительными слоями абстракции (а процессоры смогут работать с этим напрямую). ♨️ Иронично, но это проще - если вам нужна простая обработка логики, проверка или преобразование данных, то, с точки зрения ресурсов, написание кода через процессоры займёт меньше времени, места, и его будет проще поддерживать, чем аспекты.

Окей, а что там по собеседованиям??? ♨️ Знание вами этих вещей даст понять собеседующему, что вы не просто знаете жизненный цикл бина, но и понимаете его «под капотом» ♨️ Понимание процессоров спасёт вас от ответа «это то же аннотация @PostConstruct!» ♨️ При обсуждении аспектов вы сможете указать, что некоторые задачи можно сделать ещё круче, приведя аргументы ♨️ Повышение своих хардовых навыков увеличивает шанс получить оффер мечты на 100%

Пишите в комментариях свои вопросы и предложения по этой теме, вполне вероятно, что кто-то может не знать того, что знаете вы!

#java #spring #education #backend
Spring: BPP и BFPP | Сетка — новая социальная сеть от hh.ru
repost

268

input message

напишите коммент

еще контент автора

еще контент автора

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь