AOP는 OOP의 확장에 가깝기 때문에 전용 언어나 독립된 개발 툴을 가지고 있지 않고 대신 기존의 OOP를 확장한 언어 확장(languageextension) 또는 툴이나 프레임워크 형태로 사용할 수 있게
되어 있다. 대표적으로 AOP 구현의 시초가 된 Eclipse 프로젝트의 AspectJ를 들 수 있다.
AspectJ는 초기에 제록스 PARC 연구소에서 개발되었다가 2002년에 이클립스 프로젝트에 기증되었고, 현재 IBM의 전폭적인 지원을 받으면서 개발되어 사용되고 있다.
그리고 BEA가 중심이 되어 개발하고 있는 AspectWerkz가 있다. AspectWerkz는 AspectJ와 달리 자바 언어 자체를 확장하지 않고 기존의 자바 언어만으로 AOP의 사용이 가능하도록 되어 있다.
그리고 의존성 삽입(Dependency Injection, 이하 DI) 기반의 프레임워크로 유명한 SpringAOP가 있다. 가장 최근에 등장한 AOP로는 JBossAOP도 있다.
SpringAOP와 함께 대표적인 인터셉터체인 방식의 AOP로 꼽힌다.
|
AspectJ |
AspectWerkz |
JBossAOP |
SpringAOP |
| 출시 |
2001 |
2002 |
2004 |
2004 |
| 버전 |
1.2.1 |
2.0 |
1.3.0 |
1.2.5 |
| Aspect 선언 |
전용 코드 |
XML, Annotation |
XML, Annotation |
XML |
| Advice |
전용 코드 |
자바 메소드 |
자바 메소드 |
자바 메소드 |
| JoinPoint |
메소드, 생성자, Advice, Field Access, 인스턴스 |
메소드, 생성자, Advice, Field Access, 인스턴스 |
메소드, 생성자, Advice, Field Access, 인스턴스 |
메소드 |
| Pointcut 매칭 |
Signature, WildCard, Annotation |
Signature, WildCard, Annotation |
Signature, WildCard, Annotation |
정규식 |
| Weaving |
컴파일 및 로딩 타임, 바이트 코드 생성 |
컴파일 및 로딩 타임, 바이트 코드 생성 |
런타임 인터셉션 및 Proxy |
런타임 인터셉션 및 Proxy |
| IDE 지원 |
Eclipse, JDeveloper, JBuilder, NetBeans |
Eclipse, NetBeans |
Eclipse |
|