1. pom.xml파일에 AOP를 위한 dependency 추가
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.2</version>
</dependency>
2. Logger 클래스를 만들어줌
package org.ph.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SampleLogger {
private static Logger logger = LoggerFactory.getLogger("SampleLogger");
public Object log(ProceedingJoinPoint joinPoint) throws Throwable{
//ProceedingJoinPoint가 있어야 앞, 뒤에 있는 메소드에 대한 logger가 찍힘
Object obj;
long start = System.currentTimeMillis();
logger.info("----------------------------------------");
logger.info(joinPoint.getKind());
logger.info("----------------------------------------");
logger.info(joinPoint.getArgs().toString());
logger.info("----------------------------------------");
logger.info(joinPoint.getSignature().toString());
logger.info("----------------------------------------");
logger.info(joinPoint.getTarget().toString());
//Method Invoke, Invoke가 제일 먼저 나오지 않아도 됨.
obj=joinPoint.proceed();
long end = System.currentTimeMillis();
logger.info("----------------------------------------"+ (end-start));
logger.info("----------------------------------------");
return obj;
}
}
4. root-context.xml파일에 다음 내용이 들어가있는지 확인.
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
그리고 다음 내용 추가
<bean id="timeLogger" class="org.npe.aop.TimeLogger"></bean>
<aop:config>
<aop:pointcut id="logPointcut" expression="execution(* org.npe.**.service.**.*(..))" />
<aop:aspect id="logAspect" ref="timeLogger">
<aop:around pointcut-ref="logPointcut" method="log" />
</aop:aspect>
</aop:config>
*bean id, ref 내용이 Logger 클래스명과 부합해야 함. ref는 bean id로 찾음.
*Logger 클래스 내 메소드 이름이 xml의 method 내용과 같아야 함.
*향후 method를 바꿔 security 등 용도로 쓸 수 있음
*여기까지 하면 Logger 클래스, service 클래스의 메소드에 표시가 생김.
5. 테스트 해보기
package org.ph.web;
import javax.inject.Inject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ph.service.SampleService;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/**/*-context.xml"})
public class SampleServiceTest {
@Inject
SampleService service;
@Test
public void test(){
service.doA();
service.doB();
}
}
*테스트 성공하면
INFO : TimeCheckLogger - ----------------------------------------
INFO : TimeCheckLogger - method-execution
INFO : TimeCheckLogger - [Ljava.lang.Object;@130e116b
INFO : TimeCheckLogger - void org.npe.bbs.service.SampleService.doB()
INFO : TimeCheckLogger - org.npe.bbs.service.SampleService@1fc32e4f
DOB
INFO : TimeCheckLogger - ----------------------------------------0
과 같은 내용이 콘솔창에 나와야함
'코딩 > WEB' 카테고리의 다른 글
Spring - Transaction 예제 (0) | 2014.10.17 |
---|---|
Spring - Cookie Filter 예제 (0) | 2014.10.17 |
Spring 설정 -- 1 (0) | 2014.10.14 |
Spring 설정 -- 2 Mybatis 연동하기 (0) | 2014.10.14 |
MyBatis DynamicSQL Select 문 예제(XML) (0) | 2014.10.14 |