AOP
- 관점 지향 프로그래밍 Aspect Oriented Programming
- 핵심로직에 집중 할 수 있도록 중복 작성해야하는 코드를 외부에 빼 놓는 것
설정
<aop:aspectj-autoproxy />
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.3.15</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.6</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.6</version>
</dependency>
용어
Weaving
- 보조업무가 프록시를 통해 주 업무에 주입되는 것
Advice
- 보조업무의 구현체
- 주 기능 실행 시 언제 공통기능을 적용할 지 정의
종류
Joinpoint
Aspect
- Advice+JoinPoint을 모듈화 한 것(한 데 묶은 것)
- AOP의 기본모듈로써 여러 객체에 공통으로 적용되는 기능
- what(공통기능) + When(언제) + Where(대상) 정보 포함
주요 어노테이션
@Aspect
- 조인포인트와 결합시킨 프록시객체를 만들어서 스프링 컨테이너의 빈으로 등록
@Before
@After
- 공통기능이 대상 메소드가 실행이 종료된 후에 실행
@AfterReturning
- 공통기능이 대상 메소드가 오류 없이 종료된 후에 실행
@AfterThrowing
- 공통기능이 대상 메소드 실행중 예외가 발생하며 실행
@Around
- 공통기능이 대상 메소드 실행 전후에 실행
- 선언적 트랜잭션처리를 지원하는 TransactionManager의 구현객체들과 유사
@Pointcut
PointCut
- 실제로 Advice가 적용되는 JointPoint
- 어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식
Weaving
특징
- 스프링 빈에만 AOP 적용 가능
- Spring은 프록시 기반 AOP 지원
- 프록시: 핵심기능에 공통기능이 합쳐셔 생성된 객체