Ein persönliches Memorandum über Spring AOP. Wenn Sie einen Fehler machen, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.
[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.
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. |
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
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