ホームページ  >  記事  >  Java  >  Springで動的プロキシを使用する方法

Springで動的プロキシを使用する方法

百草
百草オリジナル
2024-01-05 11:39:091359ブラウズ

Spring で動的プロキシを使用する手順: 1. インターフェイスを定義する; 2. ターゲット クラスを作成する; 3. プロキシ クラスを作成する; 4. 通知を構成する; 5. アプリケーションを実行する。詳細な紹介: 1. インターフェイスを定義するには、まずプロキシ オブジェクトによって実装されるインターフェイスを定義する必要があります。このインターフェイスは、例外がスローされる前、後、および例外がスローされたときに実行する動作を定義します。ターゲット クラスを作成し、MyService インターフェイスを実装するターゲット クラス MyServiceImpl を作成します。このクラスには、メソッドが呼び出される前に実行する処理などが含まれます。

Springで動的プロキシを使用する方法

このチュートリアルのオペレーティング システム: Windows 10 システム、DELL G3 コンピューター。

Spring フレームワークでは、ダイナミック プロキシは、AOP (アスペクト指向プログラミング) 機能を実装するために実行時にプロキシ オブジェクトを動的に作成するために一般的に使用されるテクノロジです。動的プロキシを使用すると、プログラマは、メソッドの呼び出しの前後、例外のスロー時、トランザクション内での実行時など、特定のコードを実行できる横断的な懸念事項を定義できます。

次は、動的プロキシを使用して Spring で AOP を実装する手順です:

1. インターフェイスの定義: 最初に、インターフェイスを定義する必要があります。プロキシ オブジェクトによって実装されます。このインターフェイスは、メソッド呼び出しの前後、例外がスローされたときなどに実行する動作を定義します。たとえば、doSomething() メソッドを含む MyService という名前のインターフェイスを定義できます。

public interface MyService {  
    void doSomething();  
}

2. ターゲット クラスを作成します: MyService インターフェイスを実装するターゲット クラス MyServiceImpl を作成します。このクラスには、メソッドの呼び出し前、呼び出し後などに実行するコードが含まれています。

public class MyServiceImpl implements MyService {  
    public void doSomething() {  
        System.out.println("Doing something...");  
    }  
}

3. プロキシ クラスを作成します: Spring が提供する AOP フレームワークを使用して、プロキシ クラスを作成します。 Spring は、JDK 動的プロキシと CGLIB 動的プロキシの 2 種類の動的プロキシを提供します。ここでは、JDK 動的プロキシを例として取り上げ、ProxyFactoryBean を使用してプロキシ クラス MyServiceProxy を作成します。

import org.springframework.aop.framework.ProxyFactoryBean;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
  
@Configuration  
public class AppConfig {  
    @Bean  
    public MyService myService() {  
        return new MyServiceImpl();  
    }  
  
    @Bean  
    public MyServiceProxy myServiceProxy() {  
        ProxyFactoryBean factory = new ProxyFactoryBean();  
        factory.setTargetBeanName("myService"); // 指定目标对象的名字  
        factory.addAdvice(new SimpleTraceInterceptor()); // 添加通知,定义在方法调用之前、之后等场景中执行的代码  
        return (MyServiceProxy) factory.getObject(); // 获取代理对象  
    }  
}

4. 設定通知: プロキシ クラスで、メソッドの呼び出しの前後に実行されるコードを定義する通知 (アドバイス) を設定する必要があります。ここでは例として、メソッド呼び出しの前後にログを出力する SimpleTraceInterceptor を使用します。必要に応じて通知の実装をカスタマイズできます。

5. アプリケーションを実行します: アプリケーションを起動し、動的プロキシが期待どおりに動作するかどうかをテストします。ターゲット オブジェクトでさまざまなメソッドを呼び出すことで、通知が正しく実行されたことを確認できます。上記例では、myServiceProxy().doSomething()を呼び出すと「Doing something...」というログが出力され、メソッド呼び出しの前後に対応するログが出力されます。

上記の例で使用されている JDK 動的プロキシに加えて、Spring は別のオプションとして CGLIB 動的プロキシも提供します。 CGLIB ダイナミック プロキシは、インターフェイスを実装していないクラスに適しており、プロキシ オブジェクト クラスのクラス ファイルはバイトコード処理フレームワーク asm を通じてロードされ、バイトコードを変更することでサブクラスが生成されます。 CGLIB 動的プロキシを使用する構成方法は、プロキシ オブジェクトを作成するときに異なるクラスまたは構成方法を使用する必要がある点を除いて、JDK 動的プロキシの構成方法と似ています。

以上がSpringで動的プロキシを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。