JOC - Java Open Community
Денис Гриншпун, IT Leader T1 · 17.08 · ред.
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еще контент автора
еще контент автора
JOC - Java Open Community
Денис Гриншпун, IT Leader T1 · 17.08 · ред.
войдите, чтобы увидеть
и подписаться на интересных профи