2010. 2. 12. 10:41

[Spring] Aspect Oriented Programming with Spring

질문: DB 에 접근하는 method 에서 Exception 이 날 때 문자를 보내려면 어떻게 해야 될까요?

답1: 해당 메쏘드에서  try-catch 문을 사용하고, catch 블럭에서 문자 전송 모듈을 호출합니다.

하지만 모든 메쏘드에 문자 전송 모듈을 호출하는 try - catch 문을 작성하는 것은 너무 귀찮은 반복작업이죠. 이럴 때 사용할 수 있는 것이 Spring 의 AOP 입니다. Spring 은 AOP 에 대해 아래와 같이 말하고 있습니다. 
Aspect-Oriented Programming (AOP) complements Object-Oriented Programming (OOP) by providing another way of thinking about program structure. The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect. Aspects enable the modularization of concerns such as transaction management that cut across multiple types and objects. (Such concerns are often termed crosscutting concerns in AOP literature.)
발로 번역하면
Aspect-Oriented Programming(AOP) 는 프로그램 구조에 대한 새로운 방법을 제공함으로써 객체 지향 프로그래밍(OOP) 를 보완합니다. OOP 모듈의 주요 단위가 class 인 반면, AOP 모듈의 단위는 aspect 입니다. Aspect 는 복수의 타입과 객체에 영향을 미치는 트랜잭션 관리와 같은 관심사의 분리를 가능하게 합니다. (AOP 에서 이런 관심사는 종종 crosscutting 관심사라고 불립니다.)
이렇습니다. 제 맘대로 요약하면, 여러 객체에 영향을 미치는 일을 할 때 AOP 를 사용하면 간결하고 편리합니다 라고 할 수 있겠네요.

AOP 에 대해 더 궁금하신 분들은 출처 1을 참고하시면 될 듯 합니다.

먼저, 다른 객체에 영향을 미칠 bean 을 생성하고, spring 에 bean 과 aop 관련 설정을 추가하면 됩니다.

  • ErrorSender.java


패키지 이름과 관리자 전화번호, 전송 메시지의 일부는 삭제했습니다.

  • applicationContext.xml - <beans></beans> 사이에 아래와 같이 설정하시면 됩니다.


errorSender 라는 bean 을 선언하고, 이 bean 을 참조하는 aspect 를 선언합니다.
pointcut 은 com.어쩌고.어쩌고.어쩌고.dao 패키지의 모든 클래스의 모든 메쏘드로 설정합니다.
위 pointcut 에서 어떤 것을 throw 하면 sendSMSToAdmin 메쏘드가 호출되도록 설정합니다.

이렇게 하고 실행하면 NoClassDefFoundError 가 발생합니다. 클래스패스에 spring-aop.jar aspectjrt.jar, aspectjweaver.jar, asm.jar, asm-commons.jar 를 추가해 줍니다.

  • aspectj*.jar 다운로드:
http://www.eclipse.org/aspectj/downloads.php 에서 aspectj-버전.jar 를 다운 받으신 후,
java -jar aspectj-버전.jar
를 실행하면, aspectj 를 설치할 수 있습니다.
aspectj 설치를 완료하면, (window 에서 설치 경로를 변경하지 않았다는 가정 하에) C:\aspectj버전\lib 폴더 안에서aspectjrt.jar 와 aspectjweaver.jar 파일을 발견할 수 있습니다.

  • asm*.jar 다운로드:
http://forge.ow2.org/project/showfiles.php?group_id=23 에서 asm-버전-bin.zip 파일을 다운 받아서 압축을 풀면 lib 폴더에서 asm-버전.jar 파일과 asm-commons-버전.jar 파일을 얻을 수 있습니다.

참고: spring 2.5 는 asm 3 버전과는 동작하지 않습니다. asm 2 를 사용하세요! spring 3 은 확인해보지 않았습니다. 

출처: