Wir suchen nach einer Lösung, um den Status einer Client-POJO-Instanz performant zu verfolgen. Was wir erwarten, ist: Jedes Mal, wenn eine Änderung an einem POJO vorgenommen wird, wird dieser Zustand durch Verwendung von Settors hergestellt. Wir haben einen OGNL-basierten Beobachtungs-/Event-Bus erstellt und wenn die Änderung gemacht wird, senden wir den richtigen OgnlChangeEvent
an unseren Event-Bus.So verfolgen Sie den Status eines POJO mithilfe der Codegenerierung
Bisher haben wir uns die AspectJ/cglib/Objekt-Graph-Diff-Lösung angesehen, aber alle haben zu viel CPU-Zeit beansprucht. Unsere aktuelle Lösung basiert auf Spring MethodInterceptor
und wir erstellen eine neue Proxy
Instanz jedes Mal, wenn eine Getter-Methode aufgerufen wird.
An diesem Punkt fangen wir an, Codegenerationslösungen zu betrachten, und wir stießen auf Byte Buddy. Ist diese Richtung der richtige Weg? Können wir einen neuen Class
generieren, der unseren POJO-Status des Clients erweitert und über sein OGNL-Präfix benachrichtigt, bis die Setter-Methode aufgerufen wird?
Können Sie das Leistungsproblem mit einigen Messungen näher erläutern? Wie oft rufen Sie eine Methode auf, was ist die Ausführungszeit der Methode ohne Änderungsverfolgung, was ist die Ausführungszeit mit der Änderungsverfolgung und eine Übersicht darüber, was Sie im Änderungsverfolgungsteil Ihres Codes tun? –
Ich stimme mit @ NándorElődFekete überein. Es ist kaum zu glauben, dass AspectJ langsamer sein sollte als Spring AOP. Wenn ja, müssen Sie etwas falsch machen, weil AspectJ sehr effizient ist. Vielleicht könnten wir Ihnen helfen, wenn wir Ihre Aspekte sehen würden. Aber wenn Sie mit ByteBuddy zufrieden sind, ist dieser Kommentar vielleicht veraltet. Ich habe in letzter Zeit nicht viel hier gelesen, weil ich beschäftigt war, also bin ich ein bisschen spät dran, vielleicht hier zu kommentieren. – kriegaex