Un mémorandum personnel sur Spring AOP. Si vous faites une erreur, je vous serais reconnaissant de bien vouloir commenter.
[Présentation détaillée de Spring](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 = printemps & qid = 1566716142 & s = passerelle & sr = 8-3) Spring AOP Pour JoinPoint (minutage avant ou après l'exécution de la méthode spécifiée), vous pouvez insérer le processus implémenté dans la classe avec l'annotation @Aspect.
Annotation | La description |
---|---|
@Before | Le traitement est inséré avant d'exécuter la méthode cible. |
@AfterReturning | Le traitement est inséré après la fin normale de la méthode cible. Vous pouvez également obtenir la valeur de retour de la méthode au moment de l'arrêt normal. |
@AfterThrowing | La méthode cible se termine anormalement(Lorsqu'une exception est levée)Le traitement est inséré dans. Vous pouvez également obtenir une exception au moment d'une résiliation anormale. |
@After | Le traitement est inséré à la fin, que la méthode cible se termine normalement ou lève une exception. |
@Around | Le meilleur conseil. Le traitement est inséré avant et après la méthode cible. |
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("Début de la méthode:" + 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("Méthode d'arrêt réussie:" + jp.getSignature());
System.out.println("Valeur de retour:" + 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("Méthode abend:" + 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("Fin de la méthode:" + 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("Début de la méthode:" + jp.getSignature());
Object result;
try {
//Exécution de la méthode cible
result = jp.proceed();
System.out.println("Fin de la méthode:" + jp.getSignature());
System.out.println("Valeur de retour:" + result);
return result;
} catch (Throwable e) {
System.out.println("Méthode abend:" + jp.getSignature());
e.printStackTrace();
throw e;
}
}
}
Pointcut
Vous pouvez également nommer le point de coupe et le réutiliser.
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("Début de la méthode:" + jp.getSignature());
}
}
Recommended Posts