Spring AOPの原理とは何ですか
春の AOP 原則: 1. AOP はアスペクト指向であり、オブジェクト指向プログラミング OOP を改善するためにプログラム構造を検討するための別の視点を提供するプログラミング パラダイムです。2. AOP は、開発者に水平メカニズムの説明を提供します。横断的な関心事と、横断的な関心事をオブジェクト指向ソフトウェア システムに自動的に組み込むことができます。
spring aop 原則:
AOP (アスペクト指向) は、別の視点を提供するプログラミング パラダイムです。検討してみてください。オブジェクト指向プログラミング (OOP) を補完するプログラム構造。
AOP は、開発者に横断的な懸念事項を記述するメカニズムを提供し、横断的な懸念事項をオブジェクト指向ソフトウェア システムに自動的に組み込むことができるため、横断的な懸念事項のモジュール化を実現します。
AOP は、ビジネスとは関係がないものの、トランザクション処理、ログ管理、権限制御などのビジネス モジュールによって一般的に呼び出されるロジックや責任をカプセル化して、重複コードの削減を促進します。システムを統合してモジュール数を削減し、結合度を高めることで将来の運用性や保守性を向上させます。
AOP を使用するメリット
モジュールの結合を減らす
システムを拡張しやすくする
コードの再利用性の向上
- JoinPoint: プログラムに水平線を挿入する必要がある問題となる点としては、接続ポイントはクラスの初期化、メソッドの呼び出し、フィールドの呼び出し、または例外処理などにある可能性があります。 Spring ではメソッド実行接続ポイントのみがサポートされます。
- ポイントカット: 関連する接続ポイントのセット。
- アドバイス: 接続ポイントで実行される動作拡張により、エントリ ポイントによって選択された接続ポイントで AOP の既存の動作を拡張する手段が提供されます。プリエンハンス(アドバイス前)、ポストエンハンス(アドバイス後)、サラウンドエンハンス(アドバイス前後)を含みます。
- アスペクト: 通知とエントリ ポイントの組み合わせ。
- ウィービング: ウィービングは、ターゲット オブジェクトにアスペクトを適用して AOP プロキシ オブジェクトを作成するプロセスです。
- プロキシ: プロキシを介してターゲット オブジェクトにアスペクトを適用します。 AOP プロキシは、JDK 動的プロキシまたは CGLIB プロキシを使用して実装できます。
- ターゲット オブジェクト: フォーカスに織り込む必要があるオブジェクト。つまり、プロキシされるオブジェクトです。
#AOP を実装するための主な設計パターンは動的プロキシです。
JDK 動的プロキシ シミュレーション
JDK 動的プロキシの 2 つのコア インターフェイス (クラス) は、InvocationHandler と Proxy です。注: プロキシ インターフェイスのみを使用できます。
public class TimeHandler implements InvocationHandler { // 目标对象 private Object targetObject; public TimeHandler(Object targetObject){ this.targetObject = targetObject; } @Override //关联的这个实现类的方法被调用时将被执行 /*InvocationHandler接口的方法,proxy表示代理,method表示原对象被调用的方法, args表示方法的参数*/ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object ret=null; try{ System.out.println("方法之前:"+System.currentTimeMillis()); //调用目标方法 ret=method.invoke(targetObject, args); System.out.println("方法之后:"+System.currentTimeMillis()); }catch(Exception e){ e.printStackTrace(); System.out.println("error"); throw e; } return ret; } }
TimeHandler クラスは、InvocationHandler インターフェイスを実装します。 3 つのパラメーターを持つコア メソッド呼び出しを実装します。最初のパラメータは生成されたプロキシ クラスのインスタンス、2 番目のパラメータはターゲット オブジェクトのメソッド、3 番目のパラメータはメソッドのパラメータ値の配列です。
public class ProxyUtil { @SuppressWarnings("unchecked") public static <T> T proxyOne(ClassLoader loader,Class<?>[] clz,InvocationHandler handler){ return (T)Proxy.newProxyInstance(loader, clz, handler); } }
ProxyUtil クラスは、単に Proxy.newProxyInstance() メソッドをカプセル化します。このメソッドにも 3 つのパラメータがあります。最初のパラメータはプロキシ オブジェクトのクラス ローダーを生成し、2 番目のパラメータはターゲット オブジェクトのインターフェイス配列、3 番目のパラメータは InvocationHandler インターフェイスを実装するクラス インスタンスです。
public interface UserManager { public void addUser(String userId, String userName); } public class UserManagerImpl implements UserManager { @Override public void addUser(String userId, String userName) { System.out.println("addUser(id:"+userId+",name:"+userName+")"); } } public static void main(String[] args) { UserManager um=new UserManagerImpl(); LogHandler log =new LogHandler(um); um=ProxyUtil.proxyOne(um.getClass().getClassLoader(), um.getClass().getInterfaces(), log); TimeHandler time = new TimeHandler(um); um=ProxyUtil.proxyOne(um.getClass().getClassLoader(), um.getClass().getInterfaces(), time); um.addUser("1111", "张三"); }
デモンストレーションの目的で、TimeHandler コードと同じ LogHandler がここに追加されます。
CGLIB 動的プロキシ シミュレーション
CGLIB 動的プロキシの 2 つのコア インターフェイス (クラス) は、MethodInterceptor と Enhancer です。これは JDK ダイナミック プロキシに非常に似ており、使用方法も似ています。ただし、CGLIB はクラスとインターフェイスをプロキシできます。注: 最終クラスはプロキシ化できません。
public class TimeInterceptor implements MethodInterceptor { private Object target; public TimeInterceptor(Object target) { this.target = target; } @Override public Object intercept(Object proxy, Method method, Object[] args, MethodProxy invocation) throws Throwable { System.out.println("方法之前:"+System.currentTimeMillis()); Object ret = invocation.invoke(target, args); System.out.println("方法之后:"+System.currentTimeMillis()); return ret; } }
intercept メソッドには 4 つのパラメータがあります。 1. 生成されたプロキシ クラス インスタンス。 2. プロキシ オブジェクトのメソッドによって参照されます。 3. メソッドパラメータ値の配列。 4. プロキシ クラスのメソッドへのプロキシ参照。
public class ProxyUtil { @SuppressWarnings("unchecked") public static <T> T proxyOne(Class<?> clz,MethodInterceptor interceptor){ return (T)Enhancer.create(clz, interceptor); } }
Enhancer クラスは、CGLib のバイトコード エンハンサーです。
public class UserManage { public void addUser(String userId, String userName) { System.out.println("addUser(id:"+userId+",name:"+userName+")"); } } public static void main(String[] args) { UserManage um = new UserManage(); TimeInterceptor time = new TimeInterceptor(um); um = ProxyUtil.proxyOne(um.getClass(), time); um.addUser("111", "老王"); }
関連する無料学習の推奨事項:
以上がSpring AOPの原理とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









