용어 | 설명 |
---|---|
target | 핵심관심사를 가지고 있는 실제 Bean |
advice | 횡단관심사 처리 코드 |
스프링에서는 동작 시점에 따라 @Before @After @Around @AfterThrowing @AfterReturning 지원 | |
join point | advice가 끼어드는 지점으로 target의 비즈니스 로직 메서드, field 등이 있으나 spring에서는 메서드만 지원 |
pointcut | target의 어떤 메서드에서 advice를 적용할 것인지를 결정하는 표현식으로 필터 역할 |
aspect | 횡당 관심 코드를 구현하는 객체로 모듈화된 관점에 대한 추상적인 명칭 |
하나 이상의 advice와 pointcut의 결합으로 구성 | |
weaving | aspect를 join point에 적용하는 행위 |
public class TargetBean {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
우리는 위 코드에서 setName의 실행 전에 어떠한 로그를 남기고 싶다.
위 코드에서는 this.name = name; 이 핵심 로직이고 이 핵심 로직을 가지고 있는 이 Bean 객체를 target 이라고 한다. 로그를 남기는 행위가 바로 횡단 관심사, 로그를 남기는 횡단 관심 코드가 advice가 된다.
위 adivce는 setName의 실행 전에 처리되어야 하므로 타입은 @Before가 적절하다. target에는 여러 가지 메서드가 있는데, 이 메서드 들이 join point 이다. 위 코드를 보면 setName, getName 처럼 2개의 joinpoint가 있는데, getName은 아니고 setName 메서드가 대상이므로 “setName만 대상으로” 하도록 처리하는 부분은 poincut 이다.
aspect는 바로 필터인 poincut과 횡단 관심 코드인 advice를 뭉친 것이다. aspect에는 하나 이상의 poincut + advice 들이 존재한다. 마지막으로 advice 또는 aspect를 joinpoint에 적용 시키는 것을 weaving 이라고 한다.
오.. 정말 확실한 정리!! 깔끔해요~~