Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 983419b

Browse files
Part 25: Add ThirdAspectAndAroundAdvice.java in myfirst-logging-spring-boot-starter module
1 parent d5ebdae commit 983419b

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package spring.oldboy.logging.aop;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.aspectj.lang.ProceedingJoinPoint;
5+
import org.aspectj.lang.annotation.Around;
6+
import org.aspectj.lang.annotation.Aspect;
7+
8+
/* Логируем процесс */
9+
@Slf4j
10+
/* Указываем что это aspect */
11+
@Aspect
12+
public class ThirdAspectAndAroundAdvice {
13+
14+
/*
15+
Lesson 122:
16+
17+
Данный метод должен вернуть Object, т.к. он будет оборачивать своей логикой метод *.findById(),
18+
и это некая сущность вынутая из нашей БД. Поскольку мы планируем полностью управлять методом
19+
*.findById(), нам нужно внедрить точку присоединения JoinPoint.
20+
21+
!!! НО JoinPoint не содержит методов, которые бы позволили вызвать функционал следующего в цепочке
22+
перехватчика (Interceptor) или целевой объект !!!
23+
24+
Поэтому нам нужен его наследник ProceedingJoinPoint из org.aspectj.lang -
25+
https://www.javadoc.io/doc/org.aspectj/aspectjrt/1.7.2/org/aspectj/lang/ProceedingJoinPoint.html
26+
Именно у него есть метод *.proceed(), который позволяет перейдите к следующему advice-e или вызову
27+
целевого метода. И именно это же метод возвращает Object.
28+
29+
Далее, вся учебная логика нашего Around advice повторяет логику всех advice-ов по отдельности из
30+
SecondAspectAndFirstAdvice.java, т.е. логика 4-х advice-ов реализована в одном, но нужно помнить -
31+
"С большой силой приходит большая ответственность"
32+
*/
33+
@Around("spring.oldboy.logging.aop.FirstAspect.anyFindByIdServiceMethod() && target(service) && args(id)")
34+
public Object addLoggingAround(ProceedingJoinPoint joinPoint,
35+
Object service,
36+
Object id) throws Throwable {
37+
log.info("AROUND before - invoked findById method in class {}, with id {}", service
38+
, id);
39+
try {
40+
Object result = joinPoint.proceed();
41+
log.info("AROUND after returning - invoked findById method in class {}, result {}", service
42+
, result);
43+
return result;
44+
} catch (Throwable ex) {
45+
log.info("AROUND after throwing - invoked findById method in class {}, exception {}: {}", service
46+
, ex.getClass()
47+
, ex.getMessage());
48+
throw ex;
49+
} finally {
50+
log.info("AROUND after (finally) - invoked findById method in class {}", service);
51+
}
52+
}
53+
54+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /