728x90
AOP(Aspect Oriented Programming)이란 관점 지향 프로그래밍으로 어떤 로직을 기준으로
핵심적인 관점, 부가적인 관점으로 나누어 그 관점을 기준으로 각각 모듈화 하는 것으로
즉, 공통된 로직(횡단 관심)이나 기능을 하나의 단위로 묶어 어떤 횡단 관심을
어떤 핵심 로직에 연결할지 설정하는 것을 말한다.
- 공통 로직의 예) 로깅, 예외처리, 트랜잭션, 보안(인증, 인가, 허가),.......
사용하기 위해서는 우선 pom.xml에 설정을 추가 해주어야한다.
<!-- AOP -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.8</version>
</dependency>
용어 정리
Advice
- 횡단 관심
pointcut
- 횡단 관심을 적용할 핵심 로직을 의미
a) expression(표현식)에 어떤 핵심 로직인지 설정해주어야 함 -> execution(메서드 시그니쳐)
메서드 시그니쳐는 [아웃풋][패키지명.클래스명.메서드명][인자]로 구성
ex) execution(* com.kim.biz..*impl.*(..))
-> 모든 아웃풋, com.kim.biz로 시작하는 패키지의 ???impl로 이루어진 클래스의 모든 메서드(모든 인자)
aspect
- 결합 (어떠한 횡단 관심을 어떠한 로직에 결합할 것인지)
결합 시기
around의 경우 핵심 수행로직을 advice가 강탈해와 로직 수행 전후로 구성할 수 있다.
ex) 필터 서블릿 클래스
around로 사용할 advice는 반드시 pjp를 input으로 가져야 한다.
public class AroundAdvice {
public Object printLogAround(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("[BEFORE]");
Object returnObj = pjp.proceed(); // 수행해야할 포인트컷
System.out.println("[AFTER]");
return returnObj;
}
}
사용 예시
<bean id="logAdvice" class="com.kim.biz.common.LogAdvice" />
//<bean id="객체명" class="패키지명.클래스명" />
//해당 클래스 파일을 지정한 이름으로 객체화
<aop:config>
<aop:pointcut expression="execution(* com.kim.biz..*Impl.*(..))" id="aPointcut"/>
<aop:pointcut expression="execution(* com.kim.biz..*Impl.select*(..))" id="bPointcut"/>
<aop:aspect ref="logAdvice"> // 사용할 객체명 설정
<aop:before method="printLog" pointcut-ref="aPointcut"/>
// 핵심로직 수행 전 해당 메서드 수행
</aop:aspect>
<aop:aspect ref="logAdvice">
<aop:after method="selectLog" pointcut-ref="bPointcut"/>
// 핵심로직 수행 후 해당 메서드 수행
</aop:aspect>
</aop:config>
728x90
'Spring' 카테고리의 다른 글
[AOP] .xml 설정을 @(어노테이션)으로 변경하는법 (0) | 2022.09.18 |
---|---|
[AOP] JoinPoint와 바인드 변수 (0) | 2022.09.17 |
어노테이션(@)을 이용한 의존성 주입 (0) | 2022.09.15 |
IoC(제어의 역행)과 DI(의존성 주입) (0) | 2022.09.14 |
Ioc (제어의 역행) (0) | 2022.09.14 |