AOP 등장 배경
기존 OOP에서 핵심 관심 사항(core concern)과 공통 관심 사항(cross-cutting concern)을 여러 모듈에 중복 사용되는 한계를 해결하기 위해 AOP가 등장했다. 공통 관심 사항을 기준으로 프로그래밍함으로써 공통 모듈을 손쉽게 적용할 수 있게 한다.
AOP 특징
- AOP는 핵심적인 기능에서 부가적인 기능을 분리
- Aspect 라는 모듈 형태로 만들어 설계하고 개발해 객체지향적인 가치를 지킬 수 있게하는 개념
AOP 용어
- Target : 핵심기능을 담고 있는 모듈. 부가기능의 부여 대상
- Advice : 어느 시점에 공통 관심 기능 Aspect을 적용할지 정의. Target에 제공할 부가기능 담음
- JoinPoint : Aspect가 적용될 수 있는 지점. target 객체가 구현한 인터페이스의 모든 method
- Pointcut : 공통 관심 사항이 적용될 JoinPoint. Advice를 적용할 target의 method를 선별하는 정규 표현식(execution으로 시작)
- Aspect : Advice + Pointcut (Singleton 형태의 객체로 존재)
- Weaving : 어떤 Advice를 어떤 Pointcut에 적용시킬 것인지에 대한 설정
Spring의 AOP 구현
< POJO (.xml) 버전 >
public void aop_before(JointPoint jp){
String name = joinPoint.getSignature().toShortString();
System.out.println("Advice : " + name);
}
<aop:config>
<aop:aspect id="beforeAspect" ref="">
<aop:pointcut id=="aop_before" expression="execution(public * com.test..." />
<aop:before method="before" pointcut-ref="" />
</aop:aspect>
</aop:config>
< Annotation 버전 >
설정 파일에 aop:aspectj-autoproxy/ 추가go Aspect Class를 으로 등록한다.
- @Aspect : Aspect Class 선언
- @Before("pointcut")
- @AfterReturning(pointcut="", returning="")
- @AfterThrowing(pointcut="", throwing="")
- @After("pointcut")
- @Around("pointcut")
public class Aspect {
@Pointcut("execution(public * com.test...)")
public void aop_target(){}
@Around("aop_target()")
public Object aop_around(ProceedingJoinPoint joinPoint) {
...
}
}
'Back-End > Spring' 카테고리의 다른 글
[Spring] 스프링 특징 IOC, AOP, DI 이란? (0) | 2023.12.14 |
---|---|
[Spring] pom.xml / web.xml / servlet-context.xml / root-context.xml (0) | 2023.04.30 |
[Spring] Spring MVC (0) | 2023.04.30 |
[Spring] DI (Dependency Injection) (0) | 2023.04.26 |
[Spring] Spring Framework란? (0) | 2023.04.25 |