1. Was ist AOP
AOP ist die Abkürzung der Aspekt-orientierten Programmierung, was eine Aspekt-orientierte Programmierung bedeutet. AOP ist tatsächlich eine Fortsetzung des GOF -Designmodells.
2. Einige Begriffe über Frühlings -AOP:
A. Aspekt: In der Frühlings -AOP kann die Facette mit einer allgemeinen Klasse oder in einer normalen Klasse mit @aspep Annotation (@aspespectj Style) implementiert werden.
B. Joinpoint: Im Frühjahr AOP repräsentiert ein Verbindungspunkt die Ausführung einer Methode.
C. Ratschläge: Eine Aktion, die an einem bestimmten gemeinsamen Punkt im Abschnitt ausgeführt wird. Es gibt verschiedene Arten von Benachrichtigungen, einschließlich "um", "vor" und "nach". Viele AOP-Frameworks, einschließlich Spring, verwenden Interceptors als Benachrichtigungsmodelle und halten eine linkspunktzentrierte Interceptor-Kette bei.
D. Pointcut: Definieren Sie eine oder eine Gruppe von Methoden, die bei der Ausführung dieser Methoden Benachrichtigungen erzeugen können. Spring verwendet standardmäßig eine Aspekt-Point-Cut-Syntax.
3. Benachrichtigungstyp
A. Vorabmessung (@Before): Eine vor einem Join Point ausgeführte Benachrichtigung, diese Benachrichtigung kann jedoch nicht vor dem Verbindungspunkt Ausführung verhindern (es sei denn, sie macht eine Ausnahme)
B. Benachrichtigung nach Rückgabe (@AfterReturning): Die Benachrichtigung wurde ausgeführt, nachdem ein Verbindungspunkt (Join Point) normal ausgeführt wurde
C. Benachrichtigung nach der Ausnahme ausgelöst (@afterthrowing): Benachrichtigung ausgeführt, wenn die Methode die Ausnahme ausgelöst und beendet
D. Postbenachrichtigung (@after): Benachrichtigung ausgeführt, wenn ein Verbindungspunkt beendet ist (ob es sich um eine normale Rückkehr oder eine abnormale Ausstieg handelt)
E. Surround -Benachrichtigung (@around): Benachrichtigungen über einen Join -Punkt, wie z. B. Methodenaufrufe. Dies ist der leistungsstärkste Benachrichtigungsart, und Surround -Benachrichtigungen können benutzerdefiniertes Verhalten vor und nach Methodenaufrufen abschließen. Außerdem wird auch ausgewählt
4. @Aspectj Style AOP -Konfiguration
Die Feder AOP -Konfiguration hat zwei Stile:
A. xml style = implementieren Sie Frühlings -AOP in deklarativer Form
B. Aspekt J style = implementieren Sie Frühlings -AOP mit Annotationsformular
5. Beispiel
Testaspect
Paket com.spring.aop; / *** Abschnitt*/ public class testaspep {public void doafter (joinpoint jp) {System.out.println ("Protokollendmethode:" + jp.gettarget (). GetClass (). GetName () + "." + Jp.getSignature (). GetName (); } public Object doaround (Proceedingjoinpoint PJP) löst Throwable {Long Time = System.currentTimemillis () aus; Objekt retval = pjp.procece (); time = system.currentTimemillis () - Zeit; System.out.println ("Prozesszeit:" + Zeit + "MS"); RetVal zurückgeben; } public void doBefore (joinpoint jp) {System.out.println ("Anpassungsmethode:" + jp.gettarget (). getClass (). getName () + "." + jp.getSignaturature (). getName ()); } public void dothrowing (joinpoint jp, throwable ex) {System.out.println ("Methode" + JP.Gettarget (). getClass (). getName () + ". System.out.println (ex.getMessage ()); } private void sendEx (String ex) {// todo Senden SMS oder E -Mail -Erinnerung}} Paket com.spring.service; / ** * Schnittstelle a */ public interface asservice {public void fooa (String _msg); public void bara (); } Paket com.spring.service; / ***Implementierungsklasse der Schnittstelle a*/ public class asserviceImpl implementiert asservice {public void bara () {System.out.println ("AsserviceImpl.bara ()"); } public void fooa (string _msg) {System.out.println ("AsserviceImpl.fooa (msg:"+_ msg+")"); }} Paket com.spring.service; / ** * Dienstklasse B */ public class bserviceImpl {public void barb (String _msg, int _type) {System.out.println ("bServiceImpl.barb (msg:"+_ msg+"Typ:"+_ Typ+"); if (_type == 1) werfen neue illegalArgumentException ("Testausnahme"); } public void foob () {system.out.println ("bServiceImpl.foob ()"); }}ApplicationContext
<? xmlns: aop = "http://www.springframework.org/schema/aop" xsi: Schemalocation = "http://www.spingframework.org/schema/beans http://www.springframe.org/schema/beans/ http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd "Default-autowire =" autodetekte "> <aop: config> <Aop: Klassen oder Schnittstellen unter com.spring.service Paket-> <aop: pointcut id = "businessService" Expression = "Ausführung (*com.spring.service. <AOP: Um pointcut-ref = "businessService" methode = "doaround"/> <aoP: After-Powning Pointcut-ref = "BusinessService" methode = "Dothrowing"/> </aop: Aspekt> </aop: config> <bean id = "Aspektbean"/> <bean id = "aservice
Testklasse Aoptest
öffentliche Klasse Aoptest erweitert abstractDependencyInjectionSpringContextTests {private Asservice Asservice; private BServiceImpl Bservice; Protected String [] getConfigLocations () {String [] configs = new String [] {"/ApplicationContext.xml"}; Rückgabekonfigurationen; } / *** Normaler Anruf testen* / public void testcall () {System.out.println ("Springtest Junit -Test"); Asservice.fooa ("Junit Test Fooa"); Asservice.bara (); bService.foob (); BService.barb ("Junit Test Barb", 0); } / ** * Testen Sie nach dem Werfen * / public void testThrow () {try {bService.barb ("jungit call barb", 1); } catch (illegalArgumentException e) {}} public void setaService (Asservice Service) {Asservice = Service; } public void setbservice (BserviceImpl) {bService = service; }}
Die Betriebsergebnisse sind wie folgt:
Log -Beginn -Methode: com.spring.service.aserviceImpl.fooa aserviceImpl.fooa (MSG: JUNIT -Test Fooa) Logendmethode: com.spring.service.aserviceImpl. com.spring.service.aserviceImpl.bara Prozesszeit: 0 ms log anfing Methode: com.spring.service.berviceImpl.foob bServiceImpl.foob () log Ending -Methode: com.spring.Service.ServiceImpl.foob -Prozesszeit: 0 MS -Log -Anfänger -Start -Methode: Com.sping.Service.barbe -Zeit: 0 MS -Log -Beginn -Methode: Com.sping.Service.bARBISP. BServiceImpl.barb (MSG: JUNIT -Test Barb Typ: 0) Protokollendmethode: com.spring.service com.spring.service.bserviceImpl.barb Methode com.spring.service.bserviceImpl.barb -Ausnahme -Ausnahmeausnahme