-
[🦭SprintBoot] AOP 공부 기록!프로그래밍/Spring & Springboot 2021. 11. 22. 23:14반응형
AOP란 무엇인가
- 여러 클래스 내에서 반복되는 코드를 모아둔 것!!
- 예를 들어, 방청객 A씨는 MBC에서도 일하고, KBS에서도 일하고, TVN에서도 일한다.
A씨가 하는 박수치는 알바를 박수 Method라고 할 때, 이 박수 Method는 MBC Class에도 있고, KBS Class에도 있고, TVN Class에도 존재할 것이다. 박수치는 똑같은 Method를 각 클래스 내에 하나씩 심어줘야 할까...? 박수 Method를 따로 분리한 뒤 각 클래스에서 사용할 순 없을까? => AOP
AOP의 주요개념
- Aspect : 일종의 박수 Method
- Target: 박수칠 클래스 혹은 메소드
- JointPoint: KBS, MBC.. 혹은 각 프로그램(메소드)이 끝나는 시점
- PointCut: 구체적인 JointPoint
AOP 적용 코드
1. 먼저 박수 annotation을 지정한다.
// annotation 생성 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Clap { }
2. 박수쳐 줄 메소드에 annotation을 적용한다.
@Clap // anntoation 붙이기 public String Show() { String success = "공연 성공" return success; }
3. aop를 등록한다
@Component @Slf4j @Aspect @RequiredArgsConstructor public class PublishEventAspect implements ApplicationEventPublisherAware { // clap annotation이 있는 지점을 pointcut으로 등록 @Pointcut("@annotation(clap)") public void pointcut(Clap clap) {} // after returning은 annotation이 지정된 메소드가 끝나면 진행하겠다느 뜻 @AfterReturning(pointcut = "pointcut(clap)", argNames = "clap") public void afterReturning(Clap clap) throws Exception { log.info("짝짝짝짝짝"); }
반응형'프로그래밍 > Spring & Springboot' 카테고리의 다른 글
[객체지향] 좋은 객체 지향 설계의 원칙 - SRP, DIP, OCP (0) 2022.01.06 [QUERYDSL] git merge 후 querydsl - cannot find symbol error Q class (0) 2021.10.21 [Springboot] 눙물나는 oracle 설치여행기 (+m1, oracle cloud) (2) 2021.09.04 스프링의 의존성 주입 (Dependency Injection)과 IoC 컨테이너 (1) 2021.07.16