[JAVA] Über den Frühling AOP

Ein persönliches Memorandum über Spring AOP. Wenn Sie einen Fehler machen, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.

Referenz

[Gründliche Einführung in den Frühling](https://www.amazon.co.jp/Spring%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-Spring-Framework%E3% 81% AB% E3% 82% 88% E3% 82% 8BJava% E3% 82% A2% E3% 83% 97% E3% 83% AA% E3% 82% B1% E3% 83% BC% E3% 82% B7% E3% 83% A7% E3% 83% B3% E9% 96% 8B% E7% 99% BA-% E6% A0% AA% E5% BC% 8F% E4% BC% 9A% E7% A4% BENTT % E3% 83% 87% E3% 83% BC% E3% 82% BF / dp / 4798142476 / ref = sr_1_3? __Mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & keywords = spring & qid = 1566716142 & s = Gateway & sr = 8-3) Spring AOP Für JoinPoint (Timing vor oder nach der Ausführung der angegebenen Methode) können Sie den in der Klasse implementierten Prozess mit der Annotation @Aspect einfügen.

Verfügbare Hinweisanmerkungen

Anmerkung Erläuterung
@Before Die Verarbeitung wird eingefügt, bevor die Zielmethode ausgeführt wird.
@AfterReturning Die Verarbeitung wird eingefügt, nachdem die Zielmethode normal beendet wurde. Sie können den Rückgabewert der Methode auch zum Zeitpunkt der normalen Beendigung abrufen.
@AfterThrowing Die Zielmethode wird abnormal beendet(Wenn eine Ausnahme ausgelöst wird)Die Verarbeitung wird eingefügt. Sie können auch zum Zeitpunkt einer abnormalen Beendigung eine Ausnahme erhalten.
@After Die Verarbeitung wird am Ende eingefügt, unabhängig davon, ob die Zielmethode normal endet oder eine Ausnahme auslöst.
@Around Der stärkste Rat. Die Verarbeitung wird vor und nach der Zielmethode eingefügt.

Implementierung

Before

SampleAspect.java


package com.example.demo;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class SampleAspect {
    @Before("execution(public * com.example.demo.controller.*.*(..))")
    public void startLog(JoinPoint jp) {
        System.out.println("Methodenstart:" + jp.getSignature());
    }
}

After Returning

SampleAspect.java


package com.example.demo;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import com.example.demo.controller.resorces.UserResponse;

@Aspect
@Component
public class SampleAspect {
    @AfterReturning(value = "execution(public * com.example.demo.controller.*.*(..))", returning = "user")
    public void endLog(JoinPoint jp, UserResponse user) {
        System.out.println("Methode erfolgreiche Beendigung:" + jp.getSignature());
        System.out.println("Rückgabewert:" + user);
    }
}

After Throwing

SampleAspect.java


package com.example.demo;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class SampleAspect {
    @AfterThrowing(value = "execution(public * com.example.demo.controller.*.*(..))", throwing = "e")
    public void endLog(JoinPoint jp, RuntimeException e) {
        System.out.println("Methode abbrechen:" + jp.getSignature());
        e.printStackTrace();
    }
}

After

SampleAspect.java


package com.example.demo;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class SampleAspect {
    @After("execution(public * com.example.demo.controller.*.*(..))")
    public void endLog(JoinPoint jp) {
        System.out.println("Methodenende:" + jp.getSignature());
    }
}

Around

SampleAspect.java


package com.example.demo;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class SampleAspect {
    @Around("execution(public * com.example.demo.controller.*.*(..))")
    public Object log(ProceedingJoinPoint jp) throws Throwable {
        System.out.println("Methodenstart:" + jp.getSignature());
        Object result;

        try {
            //Ausführung der Zielmethode
            result = jp.proceed();
            System.out.println("Methodenende:" + jp.getSignature());
            System.out.println("Rückgabewert:" + result);
            return result;
        } catch (Throwable e) {
            System.out.println("Methode abbrechen:" + jp.getSignature());
            e.printStackTrace();
            throw e;
        }
    }
}

Pointcut

Benannter Pointcut

Sie können den Pointcut auch benennen und wiederverwenden.

SampleAspect.java


package com.example.demo;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class SampleAspect {
    @Pointcut("execution(public * com.example.demo.controller.*.*(..))")
    public void demoController() {}

    @Before("demoController()")
    public void startLog(JoinPoint jp) {
        System.out.println("Methodenstart:" + jp.getSignature());
    }
}

Recommended Posts

Über Spring AOP
Über den Frühling AOP
Über Spring AOP Pointcut
Über den Frühling ③
Über das Binden der Spring AOP Annotation
Informationen zur Spring Security-Authentifizierung
Über DI des Frühlings ①
Übersicht über Spring AOP
[Persönliche Notizen] Über das Spring Framework
Informationen zum Spring Framework-Kontextfehler
Einführung in Spring Boot ② ~ AOP ~
[Java] Spring AOP-Ausführungsreihenfolge
Über =
Informationen zu Anmerkungen zu Spring DI
Eine Geschichte über eine BeanNotOfRequiredTypeException, die nach der Anwendung von AOP im Frühjahr aufgetreten ist
So führen Sie einen Komponententest für Spring AOP durch
Frühlingsrahmen Einfaches Studienmemo (2): AOP
Spring AOP zum ersten Mal
Über Fehler bei der Implementierung der Federvalidierung
Über method.invoke
Über Kotlin
Über attr_accessor
Über Hinemos
Ausgabesystemprotokoll mit Spring AOP-Technologie
Über die Vererbung
Frühling × Docker
Über Docker
Spring Dependency Injection mit Java, Kotlin
Javascript AOP
Über Polymorphismus
Über Optional
Über Hash
Über JitPack
Darüber ()
Informationen zur ersten Anzeige von Spring Framework
Über die Kapselung
Über JAVA_HOME
Über statische
Über Ausnahmen
Frühling Java
So schreiben Sie den Spring AOP Point Cut Specifier
Über den Umfang
[Maven] Über Maven
Informationen zum Entwerfen einer Spring Boot- und Unit-Test-Umgebung
Zusammenfassung dessen, was ich über Spring Boot gelernt habe
Über den offiziellen Startleitfaden für Spring Framework
Stimmt die Anmerkungen auf der Schnittstelle mit Spring AOP überein
Spring Boot + Spring Data JPA Informationen zu mehreren Tabellenverknüpfungen