Inhaltsverzeichnis
1. Drei Möglichkeiten, die Ausführungsreihenfolge von AOP zu konfigurieren:
1. Durch die Implementierung der Schnittstelle org.springframework.core.Ordered
3. Konfigurationsreihenfolge der Konfigurationsdatei
1. Drei Möglichkeiten, die Ausführungsreihenfolge von AOP zu konfigurieren:
1. Durch die Implementierung der Schnittstelle org.springframework.core.Ordered
@Component
@Aspect
public class WebLogAspect implements Ordered{
@Override
public int getOrder() {
// TODO Auto-generated method stub
return 1;
}
}
2. Bestellhinweise
/**
* 描述: 打印请求和响应信息
*/
@Aspect
@Component
@Order(1)
public class WebLogAspect {
private final Logger log = LoggerFactory.getLogger(WebLogAspect.class);
@Pointcut("execution(public * com.imooc.mall.controller.*.*(..)))")
public void webLog(){
}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint){
// 收到请求,记录请求内容
ServletRequestAttributes attributes =
(ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
log.info("URL : " + request.getRequestURL().toString());
log.info("HTTP_METHOD :" + request.getMethod());
log.info("IP : " + request.getRemoteAddr());
log.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "."
+ joinPoint.getSignature().getName());
log.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));
}
@AfterReturning(returning = "res", pointcut = "webLog()")
public void doAfterReturning(Object res) throws JsonProcessingException {
//处理完请求,返回内容
log.info("RESPONSE : " + new ObjectMapper().writeValueAsString(res));
}
}
3. Konfigurationsreihenfolge der Konfigurationsdatei
<aop:config expose-proxy="true">
<aop:aspect ref="aopBean" order="0">
<aop:pointcut id="testPointcut" expression="@annotation(xxx.xxx.xxx.annotation.xxx)"/>
<aop:around pointcut-ref="testPointcut" method="doAround" />
</aop:aspect>
</aop:config>
2. Ausführungsreihenfolge mehrerer Aops: Je kleiner die Reihenfolge, desto mehr wird zuerst ausgeführt und am Ende endet die Reihenfolge, in der zuerst ausgeführt wird
Je kleiner der Auftrag, desto mehr Aufträge werden zuerst ausgeführt und derjenige, der zuerst ausgeführt wird, endet am Ende.
Leihen Sie sich die Ikone des Großen Gottes aus:
Spring Aop ist ein konzentrischer Kreis, und die auszuführende Methode ist der Mittelpunkt des Kreises.
Die äußerste Ordnung ist die kleinste.
Führen Sie die doAround-Methode und die doBefore-Methode nacheinander ab der äußersten Reihenfolge AOP1 ———> AOP2 aus.
Führen Sie dann die Methode method aus,
Führen Sie abschließend die Methoden doAfter und doAfterReturn nacheinander in der Reihenfolge AOP2 ———> AOP1 aus.
Das heißt, bei mehreren AOPs muss das Vorher das Nachher sein.