プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Spring Framework
  • 【Spring Framework】AOP(アスペクト指向プログラミング)を実装してみる。…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Spring Framework】AOP(アスペクト指向プログラミング)を実装してみる。(設定ファイルから実装)

05.13

  • miyabisan2
  • コメントを書く

この記事は1分で読めます

AOP(アスペクト指向プログラミング)とは?

クラス間に共通する処理を、外だしする実装のことです。

実際に実装してみましょう。

実装イメージをクラス図にすると下記のようになります。

Main.java(実行するメインプログラム)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.springapp;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class Main {
 
    public static void main(String[] args) {
 
     ApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");
        
        //AOP適用前
        TestBean bean1 = (TestBean) app.getBean("TestBean");
        bean1.HelloWorld();
 
        System.out.println("--------------------");
 
        //AOP適用後
        TestBean bean2 = (TestBean) app.getBean("proxyBean");
        bean2.HelloWorld();
    }
 
}

TestBean.java(AOPによる処理を注入するBean)

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.springapp;
 
public class TestBean {
    private String helloWorld;
 
    public TestBean() {
        super();
        this.helloWorld = "Hello World!";
    }
public void HelloWorld() {
        System.out.println(this.helloWorld);
    }
}

AOPClass.java(注入する処理を定義したクラス。このクラスが今回の肝です。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.springapp;
 
import java.lang.reflect.Method;
 
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
 
public class AOPClass implements MethodBeforeAdvice, AfterReturningAdvice {
 
@Override
public void before(Method method, Object[] args,Object target) throws Throwable {
System.out.println("事前処理");
}
@Override
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("事後処理");
}
 
}

下記二つのインターフェイスを実装しています。

インターフェイス名 説明
MethodBeforeAdvice AOPで、メソッド実行前に処理を注入するインターフェイスです。「beforeメソッド」を実装します。
AfterReturningAdvice AOPで、メソッド実行後に処理を注入するインターフェイスです。「afterReturningメソッド」を実装します。

bean.xml(AOPの設定ファイルです。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <!-- AOPを使わない場合 -->
    <bean id="TestBean" class="com.springapp.TestBean" />
 
    <!-- AOP(処理の注入)する場合 -->
    <!-- AOPのクラス(事前処理、事後処理を定義) -->
    <bean id="AOPClass" class="com.springapp.AOPClass" />
    <bean id="proxyBean" class="org.springframework.aop.framework.ProxyFactoryBean">
     <!-- 処理を注入する対象となるクラス -->
        <property name="target" ref="TestBean"></property>
        <property name="interceptorNames">
            <list>
                <value>AOPClass</value>
            </list>
        </property>
    </bean>
 
</beans>

ProxyFactoryBean

設定情報に、「ProxyFactoryBean」というクラスを設定しています。SpringのAOP専用クラスで、AOPを使うためには定義する必要があります。

target

AOPの対象となるクラスを指定します。(ここでは、作成した「TestBean」を指定しています。)

interceptorNames

AOPで処理を注入するクラスを指定できます。listとして複数指定することも可能です。

実行結果

AOP適用後では、処理が注入されていないですが、AOP適用後は、「事前」と「事後」に処理が挿入されているのがわかります。

スポンサーリンク
  • 2018 05.13
  • miyabisan2
  • コメントを書く
  • Spring Framework
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 05.06

    【Spring Framework】DI(依存性の注入)を実装してみる。(アノテーションによる設定用クラスから)

  2. 2018 05.06

    【Spring Framework】10年以上に渡る歴史や、関連プロジェクトについて。

  3. 2018 05.19

    【Spring Boot】STSでSpring Bootプロジェクトを作ってみよう。

  4. 2018 05.19

    【Spring Boot】「Thymeleaf(タイムリーフ)」で画面にまとまった値を渡そう。

  5. 2018 05.06

    【Spring Framework】Springのコア機能(DI :依存性の注入)について

  6. 2018 05.19

    【Spring Boot】「Thymeleaf(タイムリーフ)」でビューを作ろう。(Hello World)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【GoFのデザインパターン】「Proxy(プロキシ)」…

【Spring Framework】AOP(アスペクト…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー