상세 컨텐츠

본문 제목

[스프링] aop before, afterthrowing, afterreturning, around,

카테고리 없음

by esoesmio 2023. 6. 6. 21:23

본문

package com.bit.springboard.common;

//import org.aopalliance.intercept.Joinpoint;
import org.aspectj.lang.JoinPoint;

public class Before {
	
	public void beforeLog(JoinPoint jp) {
		
		String methodName = jp.getSignature().getName();
		Object[] methodArgs = jp.getArgs();
		
		
		
		if(methodArgs.length !=0)
		
		{System.out.println("[사전처리]" + methodName + "()의 매게변수정보 : " + methodArgs[0].toString());
		}
		
		else {
			System.out.println("[사전처리]" + methodName + "()는 매개변수가 없습니다.");
		}
		
	}

}
package com.bit.springboard.common;

import org.aspectj.lang.JoinPoint;

public class AfterThrowing {
	
	public void afterThrowingLog(JoinPoint jp , Exception exception) {
		
		
		String methodName = jp.getSignature().getName();
		
		System.out.println("[예외처리]" + methodName + "()실행중 발생한 예외 : " + exception.getMessage());
		

		
		
	}
	
	
	
	
	

}
package com.bit.springboard.common;

import org.aspectj.lang.JoinPoint;

import com.bit.springboard.dto.BoardDTO;

public class AfterReturning {
//returnobj : 포인트컷 메소드가 종료될 때 반환해주는 값
	// 두번쨰 매개변수인 OBject를 바인드 변수라고 하고 메소드의 리턴값을 자동으로 매핑.

	public void afterReturningLog(JoinPoint jp, Object returnObj) {
		String methodName = jp.getSignature().getName();

		//뭐를 했길래 returnobj에 boarddto가 들어오는거지?
		
		
		if (returnObj != null && returnObj instanceof BoardDTO) {
			BoardDTO board = (BoardDTO) returnObj;
			if (board.getBoardWriter().equals("관리자")) {
				System.out.println("관리자가 작성한 글입니다.");
			}

		}
		if (returnObj != null) {
			System.out.println("[사후처리]" + methodName + "()의 리턴값 : " + returnObj.toString());
		}

		else {
			System.out.println("[사후처리]" + methodName + "()의 리턴값 은 없습니다. ");

		}

	}

}
package com.bit.springboard.common;

import org.aspectj.lang.ProceedingJoinPoint;

public class Around {
	
	
	public Object aroundLog(ProceedingJoinPoint pjp) throws Throwable {
		
		System.out.println("[사전처리] 비즈니스 로직 전 실행");
		Object returnObject = pjp.proceed();
		System.out.println("[사후처리] 비즈니스 로직 후 실행  ");
		return returnObject;
	}
	

}

댓글 영역