[JAVA] Einführung in Spring Boot ② ~ AOP ~

Erfahren Sie mehr über AOP nach dem vorherigen DI. Bitte beachten Sie, dass der Inhalt sehr einführend ist.

AOP(Aspect-Oriented Programming)

Aspektorientierte Programmierung ist eines der Konzepte von Entwicklungsmethoden wie objektorientiert. Beim Schreiben einer Methode wird die Verarbeitung gemischt, die nicht in direktem Zusammenhang mit den gewünschten Aktionen steht, z. B. die Protokollierungsverarbeitung und die Authentifizierungsverarbeitung. Dies ist eine Entwicklungsmethode, die versucht, eine solche Hilfsverarbeitung zu trennen und zu beschreiben (Bedenken). Angenommen, Sie haben die folgende Methode "drinkAlcohol ()".

➀ Start Log: Ich werde trinken!
	↓
➁ Trinken
	↓
➂ End Log: Ich habe mich betrunken!

In diesem Fall sind (1) und (3) Prozesse, die nicht direkt mit dem "Trinken" zusammenhängen, daher werden sie an verschiedenen Stellen separat beschrieben. Setzen Sie dann ① vor der Ausführung der Methode und ③ nach der Ausführung. Jetzt kümmert sich die Methode "drinkAlcohol ()" nicht mehr um den Protokollierungsprozess, sondern nur um den "Trink" -Prozess.

Die Idee, die Hilfsverarbeitung (Bedenken) auf diese Weise zu trennen und zu modularisieren, wird als AOP bezeichnet. Es ist alt, aber [hier](http://netail.net/aosdwiki/index.php?%A5%A2%A5%B9%A5%DA%A5%AF%A5%C8%BB%D8%B8%FE Die Erklärung von% A5% D7% A5% ED% A5% B0% A5% E9% A5% DF% A5% F3% A5% B0) war leicht zu verstehen.

Glossar

der Begriff Bedeutung
Aspect Eine Zusammenfassung des allgemeinen Verarbeitungsverhaltens (Bedenken) und der anzuwendenden Punkte
=Eine Zusammenfassung von Ratschlägen und Pointcut
Advice Separates allgemeines Verarbeitungsverhalten
Der Prozess selbst, der tatsächlich ausgeführt wird
JoinPoint Zeitpunkt, um Ratschläge zu geben
Vor oder nach dem Ausführen einer Methode usw.
PointCut Bedingungen für die Anwendung Beratung
Bedingter Ausdruck, um zu bestimmen, ob Advice ausgeführt werden soll, wenn JoinPoint erreicht ist

JoinPoint-Anmerkung

Eine Anmerkung wird bereitgestellt, um den Zeitpunkt der Ausführung der Beratung festzulegen.

Anmerkung zeitliche Koordinierung
@Before Wird vor dem Ausführen der Methode ausgeführt
@After Wird nach dem Ausführen der Methode ausgeführt
Das Ausführungsergebnis spielt keine Rolle
@Around Wird anstelle der Methode ausgeführt.
Verarbeitung vor und nach der Methode
@AfterReturning Wird ausgeführt, wenn die Methode normal endet
@AfterThrowing Wird ausgeführt, wenn in der Methode eine Ausnahme auftritt

PointCut-Direktive

Beschreibt den bedingten Ausdruck, der den Rat ausführt. Werfen wir einen Blick auf das häufig verwendete Ausführungsformat.

Ausführung (Methodenmodifikator Rückgabewert Paketname.Klassenname.methodenname (Argumenttyp) löst Ausnahme aus)

Methodenmodifikatoren und Auslöseausnahmen sind optional.

@Before("execution(* com.sample..*(..))")

Im obigen Beispiel wird es ausgeführt, bevor die Methode unter dem Paket "com.sample" ausgeführt wird. Platzhalter können in bedingten Ausdrücken verwendet werden.

Platzhalter Bedeutung
* Anstelle eines beliebigen Typs oder Teils eines Klassen- oder Paketnamens
.. Anstelle eines Arguments oder eines Teils des Klassen- oder Paketnamens
+ Geben Sie alle Unterklassen- und Schnittstellenimplementierungen an, indem Sie rechts neben den Klassennamen und den Schnittstellennamen schreiben

Zusätzlich zu "Ausführung" stehen die folgenden Anweisungen zur Verfügung.

PointCut-Direktive Ausführungsbedingung
within(Name der Klasse) Gilt für Methoden der angegebenen Klasse
target(Name der Klasse) Gilt für Methoden von Klassen, die die angegebene Klasse erben (gilt sowohl für übergeordnete als auch für untergeordnete Klassen)
args(Argumenttyp) Gilt für Methoden mit Argumenten, die dem angegebenen Argument entsprechen
@annotation(Anmerkung) 指定したAnmerkungが付いているメソッドに適用

Beispielcode

Ich habe versucht, die obige Methode "drinkAlcohol ()" mit AOP zu realisieren.

Drink.java


public class Drink {

	public void drinkAlcohol() {
		System.out.println("drinking...");
	}
}

Schreiben Sie nicht den Protokollierungsprozess, sondern beschreiben Sie nur (2) den Prozess des Alkoholkonsums.

SampleAspect.java


@Aspect
@Component
public class SampleAspect {
	
	@Before("execution(* com.sample..*(..))")
	public void beforeDrinking() {
		System.out.println("[@Before]start drinking alcohol!");
	}

	@After("execution(* com.sample..*(..))")
	public void afterDrinking() {
		System.out.println("[@After]I got drunk...zzZ");
	}
}

Fügen Sie der Klasse Anmerkungen zu @Aspect und @Component hinzu. @Vorher ist (1) Startprotokoll und @Nach ist (3) Endprotokoll.

Das Ausführungsergebnis ist wie folgt.

[@Before]start drinking alcohol!
drinking...
[@After]I got drunk...zzZ

Protokolle werden vor und nach der Methode ordnungsgemäß ausgegeben.

@Around

Lassen Sie uns nun den gleichen Prozess mit @Around realisieren.

SampleAspect.java


@Aspect
@Component
public class SampleAspect {
	
	@Around("execution(* com.sample..*(..))")
	public void aroundDrinking(ProceedingJoinPoint pjp) {
		System.out.println("[@Around]start drinking alcohol!");	//Alle Verarbeitung (➀ Startprotokoll)
		try {
			pjp.proceed(); //Rufen Sie die Methode auf (➁ drinkAlcohol)())
		} catch (Throwable e) {
			e.printStackTrace();
		}
		System.out.println("[@Around]I got drunk...zzZ"); //Nachbearbeitung (➂ Endprotokoll)
	}
}

@Around führt Around-Ratschläge anstelle der Zielmethode aus. Sie können die Methode mit "ProceedingJoinPoint.proceed ()" aufrufen, sodass Sie die Protokollierungsverarbeitung vorher und nachher ausführen möchten.

Referenzmaterial

AOP im Frühjahr Interpretieren Sie den im Frühjahr verwendeten AOP grob Spring Aspect Oriented Programming Spring AOP --Pape SE Blog

Recommended Posts

Einführung in Spring Boot ② ~ AOP ~
Einführung in Spring Boot ~ ~ DI ~
Einführung in Spring Boot Teil 1
[Einführung in Spring Boot] Überprüfung der Formularvalidierung
Einführung in Spring Boot + In-Memory Data Grid
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Versuchen Sie Spring Boot von 0 bis 100.
Einführung in Ratpack (7) - Guice & Spring
[Einführung in Spring Boot] Senden Sie ein Formular mit thymeleaf
So führen Sie einen Komponententest für Spring AOP durch
So stellen Sie Spring Boot + PostgreSQL ein
Verwendung von ModelMapper (Spring Boot)
Rüsten Sie den Federstiefel von der 1.5-Serie auf die 2.0-Serie auf
Einführung in Ruby 2
Einführung in Spring Boot x Offene API ~ Offene API, erstellt mit Generationslückenmuster ~
Spring Fox ① Einführung
Über Spring AOP
Fordern Sie Spring Boot heraus
Die Geschichte des Übergangs von Spring Boot 1.5 zu 2.1
Über den Frühling AOP
Einführung in web3j
Änderungen bei der Migration von Spring Boot 1.5 auf Spring Boot 2.0
Einführung in Micronaut 1 ~ Einführung ~
[Java] Einführung in Java
Einführung in die Migration
Änderungen bei der Migration von Spring Boot 2.0 zu Spring Boot 2.2
Spring Boot Form
Einführung in Java
Spring Boot Denken Sie daran
gae + frühlingsstiefel
So schreiben Sie den Spring AOP Point Cut Specifier
Einführung in Doma
So teilen Sie eine Spring Boot-Nachrichtendatei
Fügen Sie Frühlingsstiefel und Gradle zur Sonnenfinsternis hinzu
Bucheinführung: Spring Boot Empfohlenes Nachschlagewerk für Anfänger!
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
So verkleinern Sie das Spring Boot Docker-Image
Verwendung von Spring Boot-Sitzungsattributen (@SessionAttributes)
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
So fügen Sie in Spring Boot einen Klassenpfad hinzu
So binden Sie mit einer Eigenschaftendatei in Spring Boot
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Ich wollte Spring Boot in einem Multiprojekt gradle
Wenden Sie Twitter Bootstrap 4 mithilfe von Webjars auf Spring Boot 2 an
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
Spring Boot - So stellen Sie das Sitzungszeitlimit ein
SPRING BOOT Lernaufzeichnung 01
Einführung in JAR-Dateien
Frühlingsstiefel + Heroku Postgres
Einführung in Ratpack (8) -Session
Schreiben von Frühlingsstiefel-Memos (1)
Einführung in die Bitarithmetik
Einführung in Ratpack (6) --Promise
Erster Frühlingsstiefel (DI)
Spring Boot2 Spickzettel
Einführung in PlayFramework 2.7 ① Übersicht