делаю подсистему событий на аспектах. мне не нравится, что для публикации событий нужно в прикладные классы инжектить applicationEventPublisher и явно вызывать у него создание эвентов и их публикацию. основная идея - создать аспект, в котором выделить логику перехвата вызовов, требующих генерации событий, и собственно самой генерации событий. чтобы прикладной код отдельно, события отдельно.
прототип выглядит вот так:
https://i.postimg.cc/cL68Z9tX/image.pngтак как аспектируемые объекты могут передавать this внутрь других классов, то есть риск вызова метода, на котором в аспекте назначен эдвайс, из объекта, не являющегося aоп-прокси. в конкретной текущей кодовой базе таких вызовов нет, но и подсистема событий со временем будет расширяться. дебажить такое продолбанное событие будет тем еще приключением, поэтому думаю, как защитится от этого изначально