この記事では、参考価値の高い Spring cglib と jdk ダイナミック プロキシの関連知識を主に紹介します。以下のエディターで見てみましょう
1. 概要
JDK 動的プロキシは、Java リフレクション機構を使用してインターフェースを実装する匿名クラスを生成し、特定のメソッドを呼び出す前に InvocationHandler を呼び出してそれを処理します
Cglib動的プロキシの使用 asm オープン ソース パッケージは、プロキシ クラスのクラス ファイルをロードし、そのバイトコードを変更して処理してサブクラスを生成します。ターゲット オブジェクトがインターフェイスを実装している場合は、デフォルトで jdk プロキシが使用されます (cglib プロキシを強制することができます)。インターフェイスが実装されていない場合は、cglib プロキシを使用する必要があります
cglib プロキシの使用を強制するには
*cglibjar パッケージの紹介
* spring
cglib はプロキシ クラスのサブクラスを動的に生成し、それを実現するためにプロキシ クラスのメソッドをオーバーライドするため、プロキシ メソッドは
final2.1 cglibプロキシクラス
package com.rocky.spring; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class CglibProxy { public static void main(String[] args) { final UserService service = new UserService(); Enhancer hancer = new Enhancer(); hancer.setSuperclass(service.getClass()); hancer.setCallback(new MethodInterceptor(){ @Override public Object intercept(Object proxy, Method method, Object[] arg2, MethodProxy arg3) throws Throwable { System.out.println("增强前 ... Cglib"); Object invoke = method.invoke(service, arg2); System.out.println("增强后 ... Cglib"); return invoke; }}); UserService userService = (UserService) hancer.create(); userService.sayHello(); } } //需要引入cglib-2.2.jar 和org.objectweb.asm-3.3.1.jar //输出 //增强前 ... Cglib //this userService works.... //增强后 ... CglibProxiedクラスUserService
package com.rocky.spring; public class UserService { public void sayHello(){ System.out.println("this userService works...."); } }2.2 jdkプロキシインターフェース
package com.rocky.spring; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class JdkProxy { public static void main(String[] args) { final ActorService service = new ActorServiceImpl(); ActorService actorService = (ActorService) Proxy.newProxyInstance( service.getClass().getClassLoader(), service.getClass() .getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("增强前...jdk"); Object invoke = method.invoke(service, args); System.out.println("增强后...jdk"); return invoke; } }); actorService.sayHi(); } } //增强前...jdk //Honestly, I do the work. //增强后...jdkProxiedインターフェースと実装クラス
package com.rocky.spring; public interface ActorService { public void sayHi(); } ----------------- package com.rocky.spring; public class ActorServiceImpl implements ActorService { @Override public void sayHi() { doSomething(); } private void doSomething() { System.out.println("Honestly, I do the work."); } }【関連おすすめ】1.
Java無料ビデオチュートリアル
2. 3. Java アノテーションの包括的な解析以上がcglib および jdk ダイナミック プロキシの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。
