오역(誤訳): 방석구
Spring Frameworkで理解するDI(3)
Spring Framework로 이해하는 DI(3)
Spring AOPサンプルアプリでAOPを理解する
Spring AOP 샘플 어플리케이션으로 AOP를 이해한다.
クロノス
크로노스(Kronos)
야마모토 다이(山本大)
2005/12/3
주(註): AOP의 기본 개념과 용어를 인지하고 있지 못하다면 이번 페이지를 이해하기 어렵습니다. 고로 한빛 네트워크의「Aspect Oriented Programming(AOP)」를 통해서 AOP의 기본 개념을 파악하고, 마이크로소프트웨어의「객체지향을 넘어 관점지향으로 AOP」중 “AOP의 구성요소” 단락을 통해서 AOP의 용어를 먼저 파악할 것을 권장합니다. 몇 개의 AOP 자료를 읽어본 결과 가장 이해하기가 용이하다고 생각됩니다.
다음의 그림은 위에서 소개한 두 사이트를 토대로 정리한 AOP 개념도 입니다.

용어 설명
– 핵심 관심사(Primary Concern)– 횡단적 관심사(Cross-Cutting Concern)
– Aspect(or Adviser): Advice + Pointcut
– Advice(or Interceptor): 횡단적 관심사Cross-Cutting Concern을 구현한 코드
– Pointcut: Advice가 배치될 위치를 결정하는 선택 기능.
– Weaving(or Cross-Cutting): Pointcut에 의해서 결정된 Joinpoint에 Advice를 삽입하는 과정.
– Joinpoint: Advice가 배치될 위치.
前回「第2回 Springフレームワークの思想とAOP」ではSpringフレームワークが提供するAOPについて説明しました。今回は実際にコードを読みながら、AOPについて理解します。
전회「제 2회 Spring Framework의 사상과 AOP」에서는 Spring Framework가 제공하는 AOP에 대해서 설명했습니다. 금회에서는 실제로 코드를 파악하면서, AOP에 대해서 알아보겠습니다.
샘플 어플리케이션으로 AOP를 이해한다
SpringフレームワークのAOPは、AspectJのような特殊な言語や環境を必要としません。標準のJavaの機能だけで実現されています。そのためライブラリをいくつか設定するだけでDIコンテナにAOPを導入することができます。
Spring Framework AOP는 AspectJ처럼 특수한 언어나 환경을 필요로 하지 않으며, 표준 Java 기능만으로 구현이 가능합니다. 그 때문에 라이브러리를 몇 개 설정하는 것만으로 DI 컨테이너에 AOP를 도입할 수 있습니다.
SpringのAOPはDIコンテナで管理されたオブジェクトに対して使用することができます。またAOPによって処理が挿入されたオブジェクトインスタンスは、インターフェイスを介してアクセスされる必要があります。
Spring AOP는 DI 컨테이너에 의해 관리되는 오브젝트에 사용할 수 있습니다. 또한 AOP에 의해서 처리가 삽입된 오브젝트 instance는 인터페이스를 사이에 두고 접근 해야만 합니다.
DIでは、オブジェクト同士の疎結合を実現するためにインターフェイスベースのプログラミングを強く推奨しています。この考え方とインターフェイスベースのプログラミングのメリットなどは、後ほど連載の中で詳しく説明することにします。
DI에서는 오브젝트끼리의 소결합을 구현하기 위해서 인터페이스 기반의 프로그래밍을 권장하고 있습니다. 이러한 내용과 인터페이스를 기반으로 한 프로그래밍의 메리트 등은 연재 중에 상세히 설명하기로 하겠습니다.
ここでは、AOPを使用するためには「インターフェイスと具象クラスを分離しなければならない」ということに注意しておいてください。
일단, 여기에서는 AOP를 사용하기 위해서는「인터페이스와 구상 클래스를 분리해야만 한다」라는 것에만 주의해 주세요.
■ サンプルアプリケーションの準備
■ 샘플 어플리케이션 작성 준비
SpringAOPを使用するためには、以下のJARファイルにクラスパスを通さなくてはなりません。このJARファイルは、Springフレームワークのアーカイブに含まれています。以下に、AOPサンプルの動作に必要なライブラリを示します。
SpringAOP를 사용하려면 아래의 JAR 파일을 클래스 패스에 등록 해야 합니다. 이 JAR 파일은 Spring Framework archive에 포함되어 있으며, AOP 샘플의 동작에 필요한 라이브러리입니다.
Jarファイル名 Jar 파일명 |
Springアーカイブ中のディレクトリ Spring archive 디렉토리 |
説明 설명 |
---|---|---|
aopalliance.jar | \lib\aopalliance | AOPを使用するために必要なライブラリ。AOPアライアンス(http://aopalliance.sourceforge.net)とは AOPに関心のあるオープンソースの連合プロジェクトである。SpringはAopAllianceが定義するインターフェイスに準拠している AOP 를 사용하기 위해서 필요한 라이브러리. AOP Alliance(http://aopalliance.sourceforge.net)는 AOP에 관심 있는 open source 연합 프로젝트이다. Spring은 AopAlliance가 정의한 인터페이스에 준거하고 있다. |
jakarta-oro.jar | \lib\oro | Jakartaが提供する正規表現を使用するためのライブラリ Jakarta가 제공하는 정규 표현을 사용하기 위한 라이브러리 |
■ サンプルアプリケーションの目的
■ 샘플 어플리케이션의 목적
今回のサンプルでは、「HelloWorld」という文字列を標準出力に書き出すだけのクラスに対してアスペクトとなる処理を挿入し、メソッドの実行前後で別の文字列を出力します。AOPを使うことで既存ロジックにまったく影響を与えずに処理を挿入できることを確認します。
이번 샘플에서는「① HelloWorld」문자열을 표준출력 하는 클래스에 애스펙트aspect 처리를 삽입하고, method의 실행 전후로 ②다른 문자열을 출력해 봅니다. AOP를 사용해서 기존 로직에 전혀 영향을 주지 않고 처리를 삽입할 수 있음을 확인 합니다.
주(註): ① 핵심 관심사primary concern. ② 횡단적 관심사Cross-Cutting Concerns.

図1は、サンプルで作成するオブジェクトの関連を表したものです。SpringAOPによって「Beanインターフェイスオブジェクト」を取得すると、インターセプタークラスで定義した処理を挿入した具象オブジェクトが取得できます。
그림 1은 샘플로 작성하는 오브젝트의 관계를 나타냅니다. SpringAOP에 의해 샘플 기동 클라이언트(SpringTest)가「Bean 인터페이스 오브젝트(IHelloWorldBean)」를 취득하면, 인터셉터interceptor 클래스(MyMethodIntercepter)에서 정의한 처리를 삽입한 구상 클래스(Bean implements)를 취득할 수 있습니다.
■ サンプルアプリケーションの作成
■ 샘플 어플리케이션의 작성
今回のAOPサンプルで作成するソースを以下に示します。
이번에 AOP 샘플로 작성하는 소스는 다음과 같습니다.
クラス名 클래스명 |
役割 역할 |
目的 목적 |
---|---|---|
SpringTest | サンプル起動クライアント 샘플 기동 클라이언트 |
DIコンテナを呼び出して、IHelloWorldBeanオブジェクトを生成 IHelloWorldBean のhelloworld()メソッドを実行します DI 컨테이너를 호출해서, IHelloWorldBean 오브젝트를 생성 IHelloWorldBean의 helloworld() 메소드를 실행합니다. |
IHelloWorldBean | Beanインターフェイス Bean 인터페이스 |
helloworld()メソッドを持つインターフェイス helloworld() 메소드가 기술된 인터페이스. |
HelloWorldBeanImpl | Bean実装 Bean implements |
IHelloWorldBeanを実装した具象クラス。helloworld()メソッドで標準出力に「Helloworld」と出力します IHelloWorldBean 를 implements한 구상 클래스. Helloworld() 메소드에서 표준 출력으로「① Helloworld」를 출력합니다. 주(註): ① 핵심 관심사primary concern |
MyMethodIntercepte | インターセプター 인터셉터interceptor |
標準出力に対して、「メソッド実行前」と「メソッド実行後」を表示します 표준 출력 시, ② 메소드 실행전과 메소드 실행 후를 표시합니다. 주(註): ② 횡단적 관심사Cross-Cutting Concerns |
applicationContext.xml | DI設定ファイル DI 설정 파일 |
DIコンテナの設定を行います。IHelloWorldBeanオブジェクトにMyMethodIntercepterの処理を挿入する処理はこのファイルで指定されます DI 컨테이너의 설정을 합니다. IHelloWorldBean 오브젝트에 MyMethodIntercepter의 처리를 삽입하는 과정은 이 파일에서 지정됩니다. |
RegexpMethodPointcutAdvisor | アドバイザー 어드바이저adviser |
Springフレームワークで定義済みのアドバイザー正規表現を使用したポイントカットの指定が可能です Spring Framework에서 정의된 어드바이저adviser. 정규 표현을 사용한 포인터 컷point cut의 지정이 가능합니다. |
INDEX | |
---|---|
제3회 Spring Framework로 이해하는 DI | |
* | Page1 샘플 어플리케이션으로 AOP를 이해한다 |
Page2 샘플 어플리케이션의 실행 |
|
Page3 DI 컨테이너로 라이프 사이클Life cycle을 관리 |
Spring Framework로 이해하는 DI Back number
제1회 DI: 의존성 주입Dependency Injection이란 무엇인가?
제2회 Spring Framework의 설계 사상과 AOP
제3회 Spring AOP 샘플 어플리케이션으로 이해하는 AOP
최종회 왜 DI 컨테이너container를 사용해야 하는가