12
Spring AOP HelloWorld @ASPECTJ ANNOTATION BASED AOP 탑탑탑탑탑 (www.topcredu.co.kr ), 탑탑탑

(스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

  • Upload
    3-2

  • View
    1.148

  • Download
    3

Embed Size (px)

Citation preview

Page 1: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

Spring AOPHelloWorld@ASPECTJ ANNOTATION BASED AOP

탑크리에듀 (www.topcredu.co.kr), 이종철

Page 2: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

소스코드 및 동영상 보기는 아래 URL에서 가능 합니다 .

http://ojc.asia

Page 3: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

AOP HelloWorld - 1 File -> New -> Spring Legacy Project -> Simple Spring Maven 선택 후 프로젝트명을 “ aophello1” 이라고 입력 후 “ Finish” 클릭 단순히 "Hello AOP1..." "Hello AOP2..." 이라고 출력하는 PrintMsg 클래스의 메소드

sayHello1(), sayHello2() 가 있고 이 클래스에 주변충고 ( 어라운드 어드바이스 , Around Advice) 를 추가해 sayHello1() 메소드에만 실행 전 / 후 필요한 기능 (" 메소드 실행전 안녕 ...", " 메소드 실행후 안녕 ...") 을 출력하고자 한다 .

@AspectJ Annotation 을 이용하는 방법으로 타겟클래스의 sayHello1(), sayHello2() 메소드중 sayHello1() 메소드만 주변충고가 적용되도록 구성한 예제이다 .

www.topcredu.co.kr

Page 4: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

AOP HelloWorld - 2 pom.xml 에 @AspectJ Annotation 기반 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

Page 5: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

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

Page 6: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

AOP HelloWorld - 4 [LoggingAspect.java] // Aspect 클래스로 충고용 메소드 및 포인트컷을 정의한다 . // 아래 myAdvice 가 주변충고용 메소드로 메소드 상단에 포인트컷을 정의했다 . // pjp.procees() 메소드를 통해 원래 타겟클래스의 sayHello1() 메소드가 호출된다 . package aophello1; import org.aspectj.lang.ProceedingJoinPoint;

www.topcredu.co.kr

Page 7: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

AOP HelloWorld – 4 Cont@Aspectpublic class LoggingAspect { // 주변충고 임을 정의하고 sayHello1() 메소드 실행 전후에 주입된다 . @Around("execution(* aophello1.PrintMsg.sayHello1())")

public void myAdvice(ProceedingJoinPoint pjp) throws Throwable{

System.out.println(" 메소드 실행전 안녕 ..."); // 메소드 실행전Object ret = pjp.proceed();System.out.println(" 메소드 실행후 안녕 ..."); // 메소드 실행후

}}

www.topcredu.co.kr

Page 8: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

AOP HelloWorld – 5 [src/main/resources/aophello1.xml]<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd ">

www.topcredu.co.kr

Page 9: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

AOP HelloWorld – 5 Cont <aop:aspectj-autoproxy />

<!-- Definition for printMsg bean, 타겟클래스 --> <bean id="printMsg" class="aophello1.PrintMsg" />

<!-- Definition for logging aspect 충고들이 오여있는 Aspect 클래스 --> <bean id="logging" class="aophello1.LoggingAspect"/> </beans>

www.topcredu.co.kr

Page 10: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

AOP HelloWorld – 6 [HelloMain.java]package aophello1; import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; public class HelloMain {

public static void main(String[] args) {ApplicationContext ctx = new

ClassPathXmlApplicationContext("aophello1.xml")IPrintMsg printMsg = (IPrintMsg) ctx.getBean("printMsg");

//sayHello1 만 충고가 내려가도록 되어 있다 .printMsg.sayHello1(); printMsg.sayHello2();

}}

www.topcredu.co.kr

Page 11: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

실행 결과메소드 실행전 안녕 ...Hello AOP1...메소드 실행후 안녕 ...Hello AOP2...

www.topcredu.co.kr

Page 12: (스프링프레임워크기초강좌 AOP HelloWorld3)@AspectJ 어노테이션을 이용한 HelloWorld AOP예제_자바9/스프링프레임워크/JPA 실무강좌

This practice makes the Expert!

스프링 , 마이바티스기초단기속성과정자바기초에서 JSP 스프링 ,MyBatis 까지 Spring Framework & JPA