실습1 ) 서비스 기능에 반환이 있는 경우,
      그 반환값이 배열일때는 아무일x
      그 반환값이 DTO 일때 >> 어떤 DTO인지 로그찍기
실습2 ) CUD 에 대해서
      전에 DB 접근 발생! 이라고 로그찍기
      후에 DB 변경 완료! 로그찍기

 

Pointcut 참조 메서드

    @Pointcut("execution(* com.nsd.app.biz..*Impl.*(..))")
    public void check_CRUD() {}

 

실습 1 : 서비스 기능에 반환이 있는 경우

더보기
@Around("PointcutCommon.check_CRUD()")
public Object check_CRUD(ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("TestReturnObj.java method:check_CRUD AOP:Around log 시작");
        Object result = pjp.proceed();// 메서드를 실행

        String methodName = pjp.getSignature().getName();
        System.out.println("TestReturnObj.java method:check_CRUD AOP:Around log 실행중인 methodName : [" + methodName + "]");

        if(methodName.contains("SelectOne")){
            String dtoName = result.getClass().getSimpleName();
            if (dtoName.lastIndexOf("DTO") > 0){
                System.out.println("TestReturnObj.java method:check_CRUD AOP:Around 조건:dtoName.lastIndexOf(\"DTO\") > 0 log 반환된 DTO : [" + dtoName + "]");
            }
        }

        System.out.println("TestReturnObj.java method:check_CRUD AOP:Around log 종료");
        return result;
}

실습2 : CUD 에 대해서 DB 접근 변경 로그 찍기

더보기
    @Around("PointcutCommon.check_CRUD()")
    public Object check_CRUD(ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("TestReturnObj.java method:check_CRUD AOP:Around log 시작");
        String methodName = pjp.getSignature().getName();
        System.out.println("TestReturnObj.java method:check_CRUD AOP:Around log 실행중인 methodName : [" + methodName + "]");

        if(!methodName.contains("Select")){
            System.out.println("DB 접근 중");//메서드 실행전 로그 작성
            result = pjp.proceed();//메서드 실행
            boolean flag = (boolean) result;
            if(flag){//메서드 실행 후 true를 반환하면
                System.out.println("DB 변경 완료!");//로그 작성
            }
        }

        System.out.println("TestReturnObj.java method:check_CRUD AOP:Around log 종료");
        return result;
    }

실습 1 + 실습 2 합친 코드

더보기
    @Around("PointcutCommon.check_CRUD()")
    public Object check_CRUD(ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("TestReturnObj.java method:check_CRUD AOP:Around log 시작");
        Object result = pjp.proceed();

        String methodName = pjp.getSignature().getName();
        System.out.println("TestReturnObj.java method:check_CRUD AOP:Around log 실행중인 methodName : [" + methodName + "]");

        if(!methodName.contains("Select")){
            System.out.println("DB 접근 중");
            result = pjp.proceed();
            boolean flag = (boolean) result;
            if(flag){
                System.out.println("DB 변경 완료!");
            }
        }
        else{
            String dtoName = result.getClass().getSimpleName();
            if (dtoName.lastIndexOf("DTO") > 0){
                System.out.println("TestReturnObj.java method:check_CRUD AOP:Around 조건:dtoName.lastIndexOf(\"DTO\") > 0 log 반환된 DTO : [" + dtoName + "]");
            }
        }

        System.out.println("TestReturnObj.java method:check_CRUD AOP:Around log 종료");
        return result;
    }

 

728x90

'국비 내용 정리 > 문제' 카테고리의 다른 글

국비 33일차 실습 문제  (0) 2024.08.18
국비 28일차 실습 문제  (0) 2024.08.11
JSP 이해하기 문제(ID 비교)  (0) 2024.08.06
개발자가 되고 싶은 곰