Spring/additional

[Spring] 스프링 AOP 5대 용어

sujin7837 2021. 2. 28. 19:35
반응형

스프링 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를 사용할 필요가 없어졌기 때문에 이제는 잘 사용하지 않는 기능입니다.

 

반응형