Programming/Spring

Spring AOP를 이용하여 Service클래스에 로그 출력하기

byeong07 2020. 8. 4. 00:04

Spring MVC 프로젝트에서 Service에 Aop Advice를 걸어서 log4j 로그를 출력하는 것을 합니다.

xml설정이 아닌 어노테이션을 이용했습니다.

 

특정 패키지의 모든 service 클래스가 동작할때 파라미터등 기타 정보를 출력하는 로그와 메소드가 동작하면서 걸린 시간을 로그하는 예제이다.

AOP 기초 설정하기

1.pom.xml에 라이브러리 추가.

일단 properties에 aspect 공통 버전을 설정한다.

 

aspect 공통 버전을 설정

그리고 spring aop, aspectj 라이브러리를 추가한다.
AspectJ는 자바용 AOP 지원을 제공할 목적으로 시작된 라이브러리다.

 

 

2.root-context.xml 설정하기.

 

 

그리고 root-context.xml파일에 아래 내용을 추가하자.

 

 

3.Advice 클래스 생성하기.

특정 패키지에 SampleAdvice 클래스를 생성하자.
내용은 아래와 같다.

 

 

스프링 컨테이너가 위 클래스를 인식할수 있도록, @Component 어노테이션이 적용되어 있다.
물론 root-context.xml에서 해당 패키지를 반드시 스캔 해야 한다.

어노테이션은 @Before, @Around 두개만 사용하였다.
com.hanumoka.sample.service 패키지의 모든 클래스의 모든 메소드를 대상으로 한다.
코드의 주석을 보면 대충 내용을 알수 있을 것이다.

 

위 소스가 적용되면 STS에서 Aop를 소스상 표시해준다.

 

Advice 클래스의 메소드에는 빨간 화살표가 바깥을 향하고, 이 Advice가 적용되는 Target클래스의 메소드는 빨간 화살표가 바깥에서 안쪽을 향하고 있다.
이것은 AOP관련 표시를 STS에서 자동으로 해주는 것이다.

com.hanumoka.sample.service 를 사용하는 컨트롤러를 동작 시켜보자.