Мы ищем решение для отслеживания состояния клиентского экземпляра POJO с помощью программы. Мы ожидаем, что каждый раз, когда происходит изменение POJO, это состояние создается с помощью сеттеров. Мы создали OGNL-based watch/event-bus, и когда будет произведено изменение, мы отправим надлежащее OgnlChangeEvent
на нашу шину событий.Как отслеживать состояние POJO с использованием генерации кода
До сих пор мы рассматривали решение AiffJ/cglib/object Diff, но все они занимали слишком много процессорного времени. Наше текущее решение основано на Spring MethodInterceptor
, и мы создаем новый экземпляр Proxy
каждый раз, когда вызывается метод Getter.
На этом этапе мы начинаем рассматривать решения для генерации кода, и мы наткнулись на Byte Buddy. Правильно ли это направление? Можем ли мы создать новый Class
, который расширит наше клиентское состояние POJO и сообщит о его префиксе OGNL до тех пор, пока не будет вызван метод setter?
Можете ли вы подробно рассмотреть проблему производительности с некоторыми измерениями? Сколько раз вы вызываете метод, каково время выполнения метода без отслеживания изменений, каково время выполнения с отслеживанием изменений и общий обзор того, что вы делаете в части отслеживания изменений вашего кода? –
Я согласен с @ NándorElődFekete. Трудно поверить, что AspectJ должен быть медленнее, чем Spring AOP. Если это так, вы должны делать что-то неправильно, потому что AspectJ очень эффективен. Может быть, мы сможем помочь, если увидим ваши аспекты. Но если вы довольны ByteBuddy, возможно, этот комментарий устарел. В последнее время я не читал много, потому что я был занят, поэтому я немного опоздал, чтобы прокомментировать здесь, может быть. – kriegaex