스프링 AOP
1. Aspect-관점, 측면, 양상
-@Aspect: 클래스를 AOP에서 사용하겠다는 것을 알려주는 지정자입니다.
-Asepct는 여러 개의 Advice와 여러 개의 Pointcut의 결합체를 의미하는 용어입니다.
Aspect = Advice들 + Pointcut들
Aspect = When + Where + What (언제, 어디에, 무엇을)
2. Pointcut-자르는 점
-Pointcut은 Aspect 적용 위치 지정자입니다.
-Pointcut은 횡단 관심사를 적용할 타깃 메소드를 선택하는 지시자(메소드 선택 필터)입니다.
-타겟 클래스의 타켓 메소드 지정자
//MyAspect.java
@Aspect
public class MyAspect {
@Before("execution(* runSomething())")
public void before(JoinPoint joinPoint) {
System.out.println("얼굴 인식 확인: 문을 개방하라");
//System.out.println("열쇠로 문을 열고 집에 들어간다.");
}
}
* runSomething()이 바로 Pointcut입니다.
[접근제한자패턴] 리턴타입패턴 [패키지&클래스패턴] 메소드이름패턴(파라미터패턴) [throws 예외패턴]
3. JoinPoint-결합점
-연결 가능한 지점, Asepct 적용이 가능한 모든 지점
-Pointcut은 JoinPoint의 부분집합입니다. Pointcut의 후보가 되는 모든 메소드들이 JoinPoint, 즉 Aspect 적용 가능한 지점이 됩니다.
-스프링 AOP에서 JoinPoint란 스프링 프레임워크가 관리하는 빈의 모든 메소드에 해당합니다.
-JoinPoint 파라미터를 이용하면 실행 시점에 실제 호출된 메소드가 무엇인지, 실제 호출된 메소드를 소유한 객체가 무엇인지, 또 호출된 메소드의 파라미터는 무엇인지 등의 정보를 확인할 수 있습니다.
//MyAspect.java
@Aspect
public class MyAspect {
@Before("execution(* runSomething())")
public void before(JoinPoint joinPoint) {
System.out.println("얼굴 인식 확인: 문을 개방하라");
//System.out.println("열쇠로 문을 열고 집에 들어간다.");
}
}
romeo.runSomething() 메소드를 호출한 상태라면 JoinPoint는 romeo 객체의 runSomething() 메소드가 되고, juliet.runSomething() 메소드를 호출한 상태라면 JoinPoint는 juliet 객체의 runSomething() 메소드가 됩니다.
- 광의의 JoinPoint: Aspect 적용이 가능한 모든 지점입니다.
- 협의의 JoinPoint: 호출된 객체의 메소드입니다.
4. Advice-조언, 충고
-Advisor란 Pointcut에 언제, 무엇을 적용할지 정의한 메소드입니다.
위 코드에서 before 부분에 해당
5. Advisor-조언자, 고문
Advisor = 한 개의 Advice + 한 개의 Pointcut
다수의 Advice와 다수의 Pointcut을 다양하게 조합해서 사용할 수 있는 방법, 즉 Aspect가 나왔기 때문에 하나의 Advice와 하나의 Pointcut만을 결합하는 Advisor를 사용할 필요가 없어졌기 때문에 이제는 잘 사용하지 않는 기능입니다.
'Spring > additional' 카테고리의 다른 글
[Spring] 스프링 삼각형2_AOP, PSA (0) | 2021.02.28 |
---|---|
[Spring] 스프링 삼각형1_IoC/DI (0) | 2021.02.28 |
[Spring] 스프링을 통한 의존성 주입 (0) | 2021.02.28 |
[디자인 패턴] Decorator Pattern(데코레이터 패턴) (0) | 2021.02.21 |
[디자인 패턴] Proxy Pattern(프록시 패턴) (0) | 2021.02.21 |