Ich implementiere einen REST-Service mit Spring MVC (Spring Boot) und erstelle einige Aspect
s, um einige Cross-Funktionalitäten des Service zu handhaben.Optimierung des Datenabrufs mithilfe von AOP in einem REST-Service
Ein Beispiel ist eine Service-Methode wie folgt aus:
public void doSomethingWithUser(int userId){
// retrieve user from DB and do something...
}
und in meiner Aspect
Klasse eine Methode wie folgt:
@Around("execution(* com.test.myrestsvc.services.MyService.doSomethingWithUser(..))")
public void aroundDoSomething(ProceedingJoinPoint pjp) throws Throwable {
// retrieve user (the same retrieved in the method) and do something else...
}
Wie Sie sehen können, habe ich zwei Methoden mit verschiedenen Dingen zu tun das gleiche Benutzerobjekt, also muss ich dieselbe Abfrage zweimal ausführen, auch wenn der Benutzer bereits in der Hauptmethode abgerufen wurde.
Beachten Sie, dass für bestimmte Methoden in meiner Serviceebene mehrere Aspekte durch einen einzigen Methodenaufruf ausgelöst werden, dies multipliziert die Benutzerabfrage mehrmals.
Also frage ich mich: Gibt es eine Möglichkeit, Objekte mindestens unter Aspekten in einer REST (statuslosen) Anwendung zu teilen? Können Sie einen anderen Ansatz vorschlagen, um den Datenzugriff in diesen Situationen zu minimieren?
_ „so muß ich die gleiche Abfrage zweimal ausführen“ _ Das hängt davon ab, wie Sie die Daten laden. Vielleicht ist der Benutzer bereits zwischengespeichert. Andernfalls können Sie es zwischenspeichern, z. mit '@ Cachable'. – zeroflagL