Spring AOP

jaeyong Lee·2024년 7월 7일
0

AOP 주 기능과 보조기능 분리 -> 선택한 시점에서 메서드 적용해서 보조기능 적용

사용법

maven에 aop 추가, AspectJ 추가
서로의 차이점 aop는 spring 내장, AspectJ는 좀 더 정밀한 aop적용가능

로그 적용 파일 위치

예시

AspectJ 사용

@Component
@Aspect
public class LoggingAdvice {
	private static final Logger logger = LoggerFactory.getLogger(LoggingAdvice.class);
	
 
	// target 메서드의 파라미터등 정보를 출력합니다.
	@Before("execution(* com.bookshop01.*.service.*.*(..)) or "
			+ "execution(* com.bookshop01.*.dao.*.*(..))")
	public void startLog(JoinPoint jp) {

		logger.info("-------------------------------------");
		logger.info("-------------------------------------");

		// 전달되는 모든 파라미터들을 Object의 배열로 가져옵니다. 
		logger.info("1:" + Arrays.toString(jp.getArgs()));

		//해당 Advice의 타입을 알아냅니다. 
		logger.info("2:" + jp.getKind());

		// 실행하는 대상 객체의 메소드에 대한 정보를 알아낼 때 사용합니다. 
		logger.info("3:" + jp.getSignature().getName());

		// target 객체를 알아낼 때 사용합니다. 
		logger.info("4:" + jp.getTarget().toString());

		// Advice를 행하는 객체를 알아낼 때 사용합니다. 
		logger.info("5:" + jp.getThis().toString());

	}
	
	@After("execution(* com.bookshop01.*.service.*.*(..)) or "
			+ "execution(* com.bookshop01.*.*.dao.*.*(..))")
	public void after(JoinPoint jp) { 
		logger.info("-------------------------------------");
		logger.info("-------------------------------------");

		// 전달되는 모든 파라미터들을 Object의 배열로 가져옵니다. 
		logger.info("1:" + Arrays.toString(jp.getArgs()));

		// 해당 Advice의 타입을 알아냅니다. 
		logger.info("2:" + jp.getKind());

		// 실행하는 대상 객체의 메소드에 대한 정보를 알아낼 때 사용합니다.
		logger.info("3:" + jp.getSignature().getName());

		// target 객체를 알아낼 때 사용합니다. 
		logger.info("4:" + jp.getTarget().toString());

		// Advice를 행하는 객체를 알아낼 때 사용합니다 
		logger.info("5:" + jp.getThis().toString());
	
	}

com.bookshop01 패키지의 service와 dao 패키지의 모든 메서드 전에 로그실행
com.bookshop01 패키지의 service와 dao 패키지의 모든 메서드 후에 로그실행

0개의 댓글

관련 채용 정보