JAVA & SPRING

AOP 개념과 쓰임

Digital Audio Player 2022. 5. 11. 14:13

# AOP : Aspect Oriented Programming

 

공통 관심사 -> 모듈화 (OOP 강화)

1.프록시기반

2.런타임 기반

3.인터페이스기반 

 @Around("execution(* com.codesquad.todo2.domain.project.ProjectService.addCard(..))") //Pointcut
    public Object logAddCard(ProceedingJoinPoint joinPoint) throws Throwable {
        Object[] args = joinPoint.getArgs();
        Long projectId = (Long) args[0];
        Long categoryId = (Long) args[1];
        Long userId = (Long) args[3];

        CardDto cardDto = (CardDto) joinPoint.proceed(); //형변환 필요
        Long cardId = cardDto.getId();
        String cardTitle = cardDto.getTitle();

        String dstCategoryTitle = logService.findCategoryTitleById(categoryId);
        Project project = projectService.findProjectByIdOrHandleNotFound(projectId);

        Log log = new Log(userId, cardId, cardTitle, null, dstCategoryTitle, "added");
        project.addLog(log);
        projectService.saveProject(project);

        return cardDto;
    }

# 어노테이션 

@Around : 타깃 메소드 전구역 (런타임 실행) -> 해당 메소드에서 실행 시킬 공통 로직은 joinpoint (연결점: Object 객체 -> 타겟 메소드에 들어오는 매개변수 data 와 비지니스로직을 실행 후 result data 값들을 가짐) 기준으로 타겟메소드 실행 전 과 후 타이밍을결정  -> joinPoint.getArgs() 는 전 / joinPoint.proceed() 는 후 

 

@Before : 타깃 메소드 실행 전 

@After : 타깃 메소드 실행 후 

@AfterReturning : 타깃 메소드 정상 종료 후 

@AfterThrowing : 타깃 메소드예오외 발생 시 

 

 

#Aspect 

관점 (공통단 로직)

 

#pointcut 

적용 위치 지정자(지시자) == 타깃 메소드 / 타깃 어노테이션 등 [타깃 경로 / 타깃 속성 ] (with.스프링) 

 

 

#joinpoint 

연결지점  (기준시점) 

aop적용 메소드에서 매개변수로 받으며   joinPoint.getArgs() 는 전 / joinPoint.proceed() 는 후 

-> jointPoint.getArgs() 로 타깃 메소드 request 에 대한 매개변수를 담아 공통로직을 build 하며 

request parame data 를 제어하므로 타깃메소드의 모델단 비즈니스 로직을 실행하기 전이 됨 

그 다음 jointPoint.proceed() 를 호출하게 되면서 모델단 비즈니스 로직을 db 까지 모두 실행한 result data 로 제어하면서 타깃메소드를 최종 실행한 후가 됨 

 

#Advice 

언제 / 무엇을 ?

단순히 말해 , 해당 타깃메소드에 실행할 공통 로직 

  • Aspect = Advice들 (언제, 무엇을) + Pointcut들 (어디에) = 관심사 

 

#AOP 를 적용할 아이템들 ? 

1. logging 

2. security

3. transaction 

4. message 

5 exception 등 

 

 

참고 : https://velog.io/@solar/AOP-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%A1%9C%EA%B7%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%82%A8%EA%B8%B0%EA%B8%B0

ck