강좌/Spring 3.0

012. AOP 일단 덤벼 보자 - POJO & XML 기반 AOP

여름나라겨울이야기 2013. 1. 23. 14:49
728x90

이번 강좌에서는 기존에 작성한 AOP 예제를 애너테이션(@) 기반에서 POJO & XML 기반으로 변경해 보도록 하겠습니다.

 

POJO 가 뭔지 모르신다구요?  그건 다른 강좌를... 설명하기가 그리 길진 않치만... 제가 게을러서이기도 하지만... 자꾸 삼천포로 안 빠지려구... 계속 변명 중... 이 시간에 설명했으면 이미... 그래도 지나갔으니.. 쿨락

 

변경할 곳은 딱 2 군데 뿐입니다.

 

먼저 MyAspect.java 되겠습니다.

 

 기존

 신규

 @ 애너테이션 기반

 SpringFramework 종속

 POJO & XML 기반

 SpringFramework 에 대한 종속성이 없음 

package aop002;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

 

@Aspect
public class MyAspect {
 @Before("execution(* housework())")
 public void before(JoinPoint joinPoint){
  System.out.println("얼굴 인식 확인: 문을 개방하라");
  //System.out.println("열쇠로 문을 열고 집에 들어간다.");
 }
}

package aop003;

import org.aspectj.lang.JoinPoint;

public class MyAspect {
 public void before(JoinPoint joinPoint){
  System.out.println("얼굴 인식 확인: 문을 개방하라");
  //System.out.println("열쇠로 문을 열고 집에 들어간다.");
 }
}

 

소스 코드를 비교해 보면 @Aspect 와 @Before 가 사라졌습니다.  그리하여 aop003 패키지의 MyAspect.java 는 POJO 가 되었군요.

 

그럼 이번에는 Spring 설정 파일인 expert.xml 을 보도록 하겠습니다.

 

기존 (중략)

신규 (중략) 

 <aop:aspectj-autoproxy /> 
 
 <bean id="myAspect" class="aop002.MyAspect" />
 <bean id="boy" class="aop002.Boy" />
 <bean id="girl" class="aop002.Girl" />
 <aop:aspectj-autoproxy /> 
 
 <bean id="myAspect" class="aop003.MyAspect" />
 <bean id="boy" class="aop003.Boy" />
 <bean id="girl" class="aop003.Girl" />
 
 <aop:config>
  <aop:aspect ref="myAspect">   
   <aop:before method="before" pointcut="execution(* housework())" />
  </aop:aspect>
 </aop:config>

 

오호 기존 MyAspect.java 에서 사라졌던 애너테이션들이 신규 expert.xml 에 태그로 나타나고 있군요.  당연하겠죠.

그럼 비교할 것은 기존 MyAspect.java 와 expert.xml 을 비교하는 것이 더 좋겠군요.

비교 들어갑니다.

 

 

 

줄 긋기는 안했습니다. 선이 너무 교차할 것 같아서.. ^^

각 색상을 보고 5분간 음미하세요.

그리고 혹시나 하는 마음에 Spring 설정 파일 expert.xml 전체 소스를 올려봅니다.

물론 위에 소스 압축 파일 해제 하시면 다 있긴 합니다만... 아 그리고 패키지는 aop003 패키지 입니다.

 

<?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/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <aop:aspectj-autoproxy />   
   
    <bean id="myAspect" class="aop003.MyAspect" />
    <bean id="boy" class="aop003.Boy" />
    <bean id="girl" class="aop003.Girl" />
   
    <aop:config>
        <aop:aspect ref="myAspect">           
            <aop:before method="before" pointcut="execution(* housework())" />
        </aop:aspect>
    </aop:config>
</beans>

 

자 이제 Start.java 를 실행해 보시면 잘 실행된 결과를 확인하실 수 있습니다.

 

@ 애너테이션 기반 AOP vs XML 설정 파일 기반 AOP

 

애정남은 아니지만 유지보수와 소스 파악을 위해서는 XML 설정 파일 기반 AOP 에 강력하게 한표를 던지겠습니다.

몇 달 후에 소스를 보았을 때를 상상해보시면 또는 다른 개발자가 소스를 파악하려고 할 때라면 애너테이션 기반 vs XML 설정 파일 기반의 장단점이 확 들어오실 겁니다.  무엇보다도 POJO 를 사랑하기 때문이기도 하구요.

 

제 강좌는 그 때 끄 때 둘을 섞어서.. 왜냐하면 귀찮기.. 아니구요.  우리가 아무리 XML 설정 기반을 사랑할지라도 실무에서 부딪히는 Spring AOP 는 @ 애너테이션 기반일 경우도 허다하기 때문에 두 경우 모두에 대한 학습 모두 필요하기 때문입니다.

 

이번 강좌는 여기까지 입니다.

 

그럼 모두 모두 좋은 하루 되세요.

 

PS: 솔로부대 만세.. T^T

반응형