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;

}

}



package org.hotsix.aop;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;


public class TimeLogger {

static Logger logger = Logger.getLogger("TimeCheckLogger");
public Object log(ProceedingJoinPoint joinPoint) throws Throwable{
Object obj;
long start = System.currentTimeMillis();
logger.info("----------------------------------------");
logger.info(joinPoint.getKind());
logger.info(joinPoint.getArgs().toString());
logger.info(joinPoint.getSignature().toString());
logger.info(joinPoint.getTarget().toString());
obj=joinPoint.proceed();
long end = System.currentTimeMillis(); 
logger.info("----------------------------------------"+(end-start));
return obj;
}
}




3. service 패키지 내 테스트용 클래스 만들어줌
package org.ph.service;
import org.springframework.stereotype.Service;

@Service
public class SampleService {
public void doA() {
System.out.println("DOA");
}
public void doB() {
System.out.println("DOB");
}
public void doC() {
System.out.println("DOC");
}
}


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
Posted by 타다키치
,