<div class="note"> 이 애플리케이션은 네델란드 자바 사용자 그룹에서 나온 질문에 대한 예제코드입니다. Alef Arendsen가 작성했습니다.

여기서 묻고자 했던 바는 하나의 애플리케이션 컨텍스트에서 여러개의 <aop:config>가 있을 경우 어떻게 처리가 되느냐라는 것입니다. 원문 주소는 아래와 같습니다. http://blog.interface21.com/main/2007/06/14/source-for-demos-shown-at-nl-jug-session-june-13th-2007/ </div>

단일 애플리케이션 컨텍스트내부의 다중 <aop:config> 의 처리#

원문의 실행결과는 다음과 같다.
Log!
Log!
Log!

이해를 돕기 위해 코드를 조금 수정해서 실행해보면 다음과 같다.

샘플 애플리케이션#

doIt() 메소드는 advise가 된다.

package kr.or.openframework;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Logger {

  public void doIt() {

  }

  public void log1() {
    System.out.println("Log1!");
  }
  public void log2() {
    System.out.println("Log2!");
  }
  public void log3() {
    System.out.println("Log3!");
  }

  public static void main(String args[]) {
    ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "kr/or/openframework/context1.xml",
        "kr/or/openframework/context2.xml" });

    Logger logger = (Loggercontext.getBean("logger");

    logger.doIt();
  }
}

하나의 간단한 AOP 설정 블럭#

<?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"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

  <bean id="logger" class="kr.or.openframework.Logger" />

  <aop:config>
    <aop:pointcut id="doItOperation"
      expression="execution(* doIt(..))" />
    <aop:aspect ref="logger">
      <aop:before pointcut-ref="doItOperation" method="log1" />
    </aop:aspect>
  </aop:config>
</beans>

두개의 간단한 AOP 설정 블럭#

<?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"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

  <bean id="logger" class="kr.or.openframework.Logger" />

  <aop:config>
    <aop:pointcut id="doItOperation"
      expression="execution(* doIt(..))" />
    <aop:aspect ref="logger">
      <aop:before pointcut-ref="doItOperation" method="log2" />
    </aop:aspect>
  </aop:config>

  <aop:config>
    <aop:pointcut id="doItOperation2"
      expression="execution(* doIt(..))" />
    <aop:aspect ref="logger">
      <aop:before pointcut-ref="doItOperation2" method="log3" />
    </aop:aspect>
  </aop:config>
</beans>

실행결과는 다음과 같다. 즉 순서대로 실행된다.

Log1!
Log2!
Log3!

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-8) was last changed on 15-Jun-2007 14:29 by DongGukLee