2. 소스코드 및 동영상 보기는 아래 URL에
서 가능 합니다.
http://ojc.asia
3. AOP HelloWorld - 1
File -> New -> Spring Legacy Project -> Simple Spring Maven 선택 후 프로젝트명
을 “aophello1” 이라고 입력 후 “Finish” 클릭
단순히 "Hello AOP1..." "Hello AOP2..." 이라고 출력하는 PrintMsg 클래스의 메소드
sayHello1(), sayHello2()가 있고 이 클래스에 주변충고(어라운드 어드바이스, Around
Advice)를 추가해 sayHello1() 메소드에만 실행 전/후 필요한 기능("메소드 실행전 안
녕...", "메소드 실행후 안녕...")을 출력하고자 한다.
스프링에서 제공하는 aop Namespace를 이용하는 방법으로 타겟클래스의
sayHello1(), sayHello2() 메소드중 sayHello1() 메소드만 주변충고가 적용되도록 구성
한 예제이다.
www.topcredu.co.kr
4. AOP HelloWorld - 2
pom.xml에 XML Schema Based AOP를 위한 의존성을 추가한다.
<!-- Spring AOP + AspectJ -->
<dependency>
<groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
www.topcredu.co.kr
5. AOP HelloWorld - 3
[IPrintMsg.java]
package aophello1;
public interface IPrintMsg {
public void sayHello1(); public void sayHello2();
}
[PrintMsg.java] 타겟 클래스(충고가 적용될 클래스)
package aophello1;
public class PrintMsg implements IPrintMsg {
public void sayHello1() { System.out.println("Hello AOP1..."); }
public void sayHello2() { System.out.println("Hello AOP2..."); }
}
www.topcredu.co.kr
6. AOP HelloWorld - 4
[LoggingAspect.java]
XML Schema Based AOP 구현에서는 Aspect클래스에 충고용 메소드를 정의한다.
아래 myAdvice가 주변충고용 메소드로 XML에서 설정을 한다.
pjp.procees() 메소드를 통해 원해 타겟클래스의 sayHello1() 메소드가 호출된다.
package aophello1;
import org.aspectj.lang.ProceedingJoinPoint;
www.topcredu.co.kr
7. AOP HelloWorld – 4 Cont
public class LoggingAspect {
public void myAdvice(ProceedingJoinPoint pjp)
throws Throwable{
System.out.println("메소드 실행전 안녕..."); //메소드 실행전
Object ret = pjp.proceed();
System.out.println("메소드 실행후 안녕..."); //메소드 실행후
}
}
www.topcredu.co.kr