Springboot AOP 적용하기

최주영·2024년 2월 20일
0

springboot

목록 보기
6/13

✅ 환경설정

  • pom.xml 에서 dependency 추가
  • 해당 라이브러리를 적용해야 @Aspect 어노테이션을 추가할 수 있음
		<dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-aop</artifactId>
		</dependency>

✅ AOP 적용시 자주일어나는 오류
-> Common causes of this problem include using a final class or a non-visible class
컨트롤러나, 서비스에서 싱글톤 패턴을 주입할 때 기본생성자의 접근제어자가 private일 경우 발생

해결책 : private -> public
ex)

// controller
public class MemberController {

	private MemberService service;

	private MemberController(MemberService service) { // 오류발생 
		this.service = service;
	}  
}


// 해결책 
public class MemberController {

	private MemberService service;

	public MemberController(MemberService service) { // 해결
		this.service = service;
	}  
}

✅ 예시 코드

package com.joo.usedmarket1.comm.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;


@Aspect
@Component
@Slf4j
public class LoggerAop {
	 // 지정한 패키지안의 메소드까지 세밀하게 조정해서 전 후로 동작을 구별할 수 있음
	@Before("execution(* com.joo.usedmarket1..*(..))")
	public void logger(JoinPoint jp) {
		Signature sig = jp.getSignature();
		log.debug("========== aop before ===========");
		log.debug(sig.getDeclaringTypeName() + " " + sig.getName());
		log.debug("==================================");
	}
	 // 지정한 패키지안의 메소드까지 세밀하게 조정해서 전 후로 동작을 구별할 수 있음
	@After("execution(* com.joo.usedmarket1..*(..))")
	public void loggerA(JoinPoint jp) {
		Signature sig = jp.getSignature();
		log.debug("========== aop after ===========");
		log.debug(sig.getDeclaringTypeName() + " " + sig.getName());
		log.debug("==================================");
	}
}

profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글