Betrachten Sie den folgenden Code in ABC.java:
<code class="java">public void method1() { // ... method2(); // ... } public void method2() { // ... // ... }</code>
Das Hinzufügen von AOP zu Methode2 beinhaltet das Erstellen eines Aspekts , AOPLogger, enthält eine Methode zum Überprüfen des Zugriffs, checkAccess. Die Spring-Konfiguration umfasst:
<code class="xml"><bean id="advice" class="p.AOPLogger" /> <aop:config> <aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" /> <aop:aspect id="service" ref="advice"> <aop:before pointcut-ref="abc" method="checkAccess" /> </aop:aspect> </aop:config></code>
Der Aspekt checkAccess wird jedoch nicht aufgerufen, wenn Methode2 aufgerufen wird. Was fehlt?
AOP funktioniert, indem es Aspekte auf Proxys anwendet, die die Bean umgeben. Wenn auf eine Bean verwiesen wird, handelt es sich nicht um die instanziierte Klasse, sondern um eine synthetische Klasse, die an die tatsächliche Klasse delegiert und Funktionen wie AOP hinzufügt.
Im Beispiel wird Methode2 direkt in der Klasse aufgerufen. Bei der Injektion als Spring-Bean wird die umschließende Klasse als Proxy injiziert und löst die Aspekte bei Methodenaufrufen aus.
Um AOP bei verschachtelten Methodenaufrufen aufzurufen, berücksichtigen Sie die folgenden Optionen:
Die Spring-Dokumentation enthält weitere Details und mögliche Problemumgehungen.
Das obige ist der detaillierte Inhalt vonWarum wird mein AOP-Aspekt in verschachtelten Methodenaufrufen nicht aufgerufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!