
> AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)
프로그램을 짜다 보면 각 모듈별로 공통적으로 나타나는 부분이 존재하는데
바로 이것을 횡단 관심사(cross-sutting concern)라고 한다.
대략적으로 공통된 부분만 따로 분리해서 처리하는거다.
공통개발할때 필수라고 볼수있다.
나같은경우 현업에서 웹에서 날리는 모든 트랜잭션을 로그로 남기는데 aop처리하였다.
AOP관련 Annotation
@Aspect
@Component
@Aspect Annotation의 경우 해당 Class가 횡단관심사(부가기능) Class임을 알려주는 Annotation이다.
@AspectAnnotation이 부여되었다고 해서 자동으로 Bean으로 등록되는것이 아니므로 따로 Bean으로 등록을 해주는 작업이 필요하다.
물론 @Component등의 Annotation을 사용해도된다.
@Aspect를 사용하는 클래스가 여러개라면 vaule를 통해 순서를 정할수있다.
@Before
@After
@Around("${pattern}"}
@Before : 메소드 실행 전에 동작
@After : 메소드 실행 후에 동작
@Around는 지정된 패턴에 해당하는 메소드의 실행되기 전, 실행된 후 모두에서 동작한다.
이 어노테이션이 붙은 메소드의 반환 값은 Object여야 한다.(지정된 패턴에 해당하는 메소드의 실행 결과를 반환해야 하므로)
위의 어노테이션들 안에는 다 값으로 특정 패턴을 지정한 문자열이 들어간다.
이를 pointcut 표현식이라고 하는데 패턴을 표현하는 방법도 여러 가지가 있다.
pointcut 표현식
작성 방법은 여러 가지가 있지만 전부 다 와일드 카드를 이용해서 작성하는 것으로 각 기호가 뜻하는 것은 아래와 같다.
*: 모든 것
..: 0개 이상
joinpoint
JoinPoint : Aspect가 적용될 수 있는 시점을 의미. JoinPoint 인터페이스는 호출되는 대상 객체, 메서드, 전달파라미터 목록에 접근할 수 있는 메서드를 제공
조인 포인트 인터페이스의 주요 기능은
JoinPoint.getArgs() : JoinPoint에 전달된 인자를 배열로 반환합니다.
JoinPoint.getThis() : AOP 프록시 객체를 반환합니다.
JoinPoint.getTarget() : AOP가 적용된 대상 객체를 반환합니다.
(클라이언트가 호출한 비즈니스 메서드를 포함하는 비즈니스 객체를 반환)
등 이있다.