스프링에 AOP 적용하기

·2024년 11월 12일

스프링

목록 보기
25/33

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

1. root-context.xml에 작성

AOP기능을 활성화하는 설정으로 AspectJ를 기반으로 자동 프록시(Proxy) 생성을 지원해준다.
이 설정을 추가하면 AOP에서 정의한 공통 기능(Aspect)이 적용 대상(Advice)에 자동으로 연결된다. 스프링이 빈(Bean)을 생성할 때, 해당 빈이 AOP 대상인지 확인하고 자동으로 프록시를 만들어서 Aspect를 적용해준다.

2. aop패키지를 생성하고, SampleAdvice 클래스 만들기

		<!-- AOP 사용하기 위한 라이브러리 -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>
		
		<!-- AspectJ -->		
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjtools</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<dependency>
	        <groupId>org.springframework</groupId>
	        <artifactId>spring-aop</artifactId>
	        <version>${org.springframework-version}</version>
 		</dependency>

3. AOP를 사용하려면 라이브러리에 등록을 해야겠죠? pom.xml에 라이브러리를 추가 합니다.

4. 아까 만들어둔 샘플 advice에 테스트를 해본다. 브라우저를 실행해보면 콘솔창에 정상적으로 로거가 잘 뜬다.

5. BoardTimeCheckAdvice 이름으로 클래스 하나 더 만들기.
여기서는 로드 될 때 걸리는 시간이 얼마인지 체크 해보기 위해 생성했다.

@Component
@Aspect
public class BoardTimeCheckAdvice {
	
	private static final Logger logger = LoggerFactory.getLogger(SampleAdvice.class);
	
	// 시작과 끝 두번을 체크하는 Around
	@Around("execution(* com.myaws.myapp.service.BoardService*.*(..))")
	public Object timelog(ProceedingJoinPoint pjp) throws Throwable {
		Object result = null;
		
		logger.info("시작하는 aop");
		logger.info("매개변수: " + Arrays.toString(pjp.getArgs()));
		long startTime = System.currentTimeMillis();
		
		// 해당되는 조인포인트를 진행시킨다.
		result = pjp.proceed();
		
		long endTime = System.currentTimeMillis();
		logger.info("끝나는 aop");
		
		// 시간이 얼마나 걸리는지 계산 
		long durTime = endTime - startTime;
		logger.info(pjp.getSignature().getName()+"걸린시간: " + durTime); 
		
		return result;
		
		
	}

}

6. 요렇게 로거 체크

0개의 댓글