1. advice
-핵심 로직이 진행 될 때 실행해야할 공통 로직
2. point-cut
-핵심 로직
3. join point
-공통로직을(advice) 핵심로직(point-cut)에 언제 실행 할 것이냐 결정
1) @Before : 핵심로직 실행 전
2) @AfterReturning : 핵심로직 실행 후, 정상적인 종료일 때만
3) @AfterThowing : 핵심로직 실행 후, 예외가 발생했을 때만
4) @After : AfterReturning + AfterThowing
5) @Around : Before + After
4. Aspect
-Advice 를 언제(join-point) 누구에게(point-cut) 실행 하는 것을 설정
5. Weaving
-Advice를 point-cut에 적용하는 행위
6. proxy
execution(접근지정자(생략가능) 리턴타입 패키지명.클래스명.메서드명(매개변수타입))
- execution(public *.*) : 모든 public 메서드
- execution( * set*()) : 모든 set으로 시작하는 메서드들 중 매개변수가 없는것
- execution( * set*(*)) : 모든 set으로 시작하는 메서드들 중 매개변수가 한개 선언한것
- execution( * set*(*,*)) : 모든 set으로 시작하는 메서드들 중 매개변수가 두개 선언한것
- execution( * set*(Integer, *)): 모든 set으로 시작하는 메서드들 중 매개변수가 두개 선언한것, 첫번째는 Integer
- execution( * set*(..)) : 모든 set으로 시작하는 메서드들 중 매개변수가 0개 이상 상관 X
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
main함수가 있는곳에 EnableAspectJAutoProxy 선언(생략 가능)
@SpringBootApplication
//@EnableAspectJAutoProxy (생략 가능)
public class StudyBootApplication {
public static void main(String[] args) {
SpringApplication.run(StudyBootApplication.class, args);
}
}
public class Transport {
// point-cut
public void takeBus() {
log.info("-------------버스타기------------");
}
public void takeSubway() {
log.info("-------------지하철타기------------");
}
public void getTaxi() {
log.info("-------------택시타기------------");
}
public void airPlane() {
log.info("-------------비행기타기------------");
}
}
@Component
@Slf4j
@Aspect
public class Card {
//Aspect
@Before("execution(* com.iu.home.aop.test.Transport.airPlane())")
public void before() {
log.info("===============Before===============");
}
@After("execution(* com.iu.home.aop.test.Transport.get*())")
public void after() {
log.info("===============After===============");
}
@Around("execution(* com.iu.home.aop.test.Transport.take*())")
public Object cardCheck(ProceedingJoinPoint joinPoint)throws Throwable {
log.info("-------삑 승차-----------");
Object obj = joinPoint.proceed();
log.info("-------삑 하차-----------");
return obj;
}
}