Say Service ruft die Dao-Klasse auf, auf die der Protokollierungsaspekt (Annotation) angewendet werden muss. Ich frage mich, wie Aspekte tatsächlich angewendet wird.Wie funktionieren Spring-Aspekte intern?
Nach meinem Verständnis zur Zeit der DAO-Injektion unter Service-Objekt, Frühling findet heraus, dass es einige Aspekt (in diesem Fall Protokollierung) für DAO konfiguriert ist, so injiziert es das Proxy-Objekt anstelle des eigentlichen Zielobjekts. Wenn nun ein tatsächlicher Aufruf einer Methode innerhalb von DAO erfolgt, wendet der Proxy die Aspekte an und ruft dann das tatsächliche Zielobjekt auf. Ist das korrekt ? Ich glaube auch, dass dies Laufzeitweben genannt wird.
Auf der anderen Seite kann das gleiche mit Ladezeit Weben (mit Java-Agent-Konfiguration) durchgeführt werden, wobei die Byte-Code-Manipulation für Klassen durchgeführt wird, auf die Aspekte angewendet werden müssen. So Proxy kommt hier nicht ins Bild.
Bitte korrigieren Sie mich, wenn ich falsch liege, da dies die Grundlage für alle Federmodule ist?
Ich glaube, Ladezeit Weben ist besser in Bezug auf die Leistung, da es keinen Leistungsaufwand bei der Entscheidung, ob Proxy muss basierend auf Aspect-Konfiguration injiziert werden, was der Laufzeit Weben ist. Ja in Ladezeit Weben Server-Start dauert etwas länger, aber das ist in Ordnung als seine einmalige Aktivität –
Die Leistung könnte in Ladezeit Weben besser sein (oder genauer Kompilierzeit Weben). Beste wäre es zu überprüfen, es tatsächlich durch einen Belastungstest) Aber es gibt andere Bereiche, die Sie vielleicht berücksichtigen möchten, wie die Änderungen im Build-System.Sie würden diesen Schritt einschließen, bevor Ihre Artefakte generiert werden. –
Nur ein nützliches Zitat - "* Alle Probleme in der Informatik können durch eine andere Ebene der Indirektion gelöst werden, außer natürlich für das Problem der zu vielen Rückweisungen. *" - David Wheeler – smwikipedia