cglib および jdk ダイナミック プロキシの詳細な説明
この記事では、参考価値の高い Spring cglib と jdk ダイナミック プロキシの関連知識を主に紹介します。以下のエディターで見てみましょう
1. 概要
JDK 動的プロキシは、Java リフレクション機構を使用してインターフェースを実装する匿名クラスを生成し、特定のメソッドを呼び出す前に InvocationHandler を呼び出してそれを処理します
Cglib動的プロキシの使用 asm オープン ソース パッケージは、プロキシ クラスのクラス ファイルをロードし、そのバイトコードを変更して処理してサブクラスを生成します。ターゲット オブジェクトがインターフェイスを実装している場合は、デフォルトで jdk プロキシが使用されます (cglib プロキシを強制することができます)。インターフェイスが実装されていない場合は、cglib プロキシを使用する必要があります
cglib プロキシの使用を強制するには
*cglibjar パッケージの紹介
* spring cglib はプロキシ クラスのサブクラスを動的に生成し、それを実現するためにプロキシ クラスのメソッドをオーバーライドするため、プロキシ メソッドは 2.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....
//增强后 ... Cglib
package com.rocky.spring;
public class UserService {
public void sayHello(){
System.out.println("this userService works....");
}
}
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. //增强后...jdk
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."); } }
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ヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









2023年、AI技術が注目を集め、プログラミング分野を中心にさまざまな業界に大きな影響を与えています。 AI テクノロジーの重要性に対する人々の認識はますます高まっており、Spring コミュニティも例外ではありません。 GenAI (汎用人工知能) テクノロジーの継続的な進歩に伴い、AI 機能を備えたアプリケーションの作成を簡素化することが重要かつ緊急になっています。このような背景から、AI 機能アプリケーションの開発プロセスを簡素化し、シンプルかつ直観的にし、不必要な複雑さを回避することを目的とした「SpringAI」が登場しました。 「SpringAI」により、開発者はAI機能を搭載したアプリケーションをより簡単に構築でき、使いやすく、操作しやすくなります。

Spring+AI は業界リーダーとして、強力で柔軟な API と高度な機能を通じてさまざまな業界に最先端のソリューションを提供します。このトピックでは、さまざまな分野での Spring+AI の応用例を詳しく掘り下げ、Spring+AI がどのように特定のニーズを満たし、目標を達成し、これらの教訓をより広範囲のアプリケーションに拡張するかを示します。このトピックが Spring+AI の無限の可能性をより深く理解し、活用するきっかけになれば幸いです。 Spring フレームワークはソフトウェア開発の分野で 20 年以上の歴史があり、Spring Boot 1.0 バージョンがリリースされてから 10 年が経過しました。今、その春に異論を唱える人はいない

Spring プログラムによるトランザクションを実装する方法: 1. TransactionTemplate を使用する; 2. TransactionCallback および TransactionCallbackWithoutResult を使用する; 3. Transactional アノテーションを使用する; 4. TransactionTemplate を @Transactional と組み合わせて使用する; 5. トランザクション マネージャーをカスタマイズする。

テクノロジーの更新と反復により、Java5.0 はアノテーションをサポートし始めました。 Java の主要なフレームワークである Spring は、バージョン 2.5 に更新されて以来、徐々に XML 構成を放棄し始めており、Spring フレームワークを制御するために使用されるアノテーションが増えています。

Spring でトランザクション分離レベルを設定する方法: 1. @Transactional アノテーションを使用します; 2. Spring 構成ファイルに設定します; 3. PlatformTransactionManager を使用します; 4. Java 構成クラスに設定します。詳細な導入方法: 1. @Transactional アノテーションを使用し、トランザクション管理が必要なクラスまたはメソッドに @Transactional アノテーションを追加し、属性に分離レベルを設定します。 2. Spring の設定ファイルなどで

Deepin Linux システムは、Linux カーネルをベースとした国産のオペレーティング システムであり、安定性、セキュリティ、使いやすさの特徴を備えており、Deepin Linux システムでは、Java アプリケーションを開発するために JDK (Java Development Kit) のインストールが必要です。この記事では、Deepin Linux システムに JDK をインストールする方法を詳しく紹介します。インストール手順: Deepin Linux システムのターミナルを開きます。コマンドラインを使用して JDK インストール パッケージをダウンロードします。コマンドは次のとおりです: ``shellsudoapt-getinstallopenjdk-11-jdk`` ダウンロードが完了するまで待つと、システムが自動的に JDK をインストールします。 JDK が正常にインストールされたかどうかを確認するには、次のコマンドを入力します。

JUnit は Spring プロジェクトで広く使用されている Java 単体テスト フレームワークであり、次の手順で適用できます。 JUnit 依存関係を追加します。 org.junit.jupiterjunit-jupiter5.8.1test テスト ケースを作成します。 @ExtendWith(SpringExtension.class) を使用して拡張機能を有効にします。 @Autowired を使用して Bean を注入し、@BeforeEach と @AfterEach を使用して準備とクリーンアップを行い、テスト メソッドを @Test でマークします。

バックエンド管理システムでは、通常、さまざまなユーザーのインターフェイスへのアクセスを制限するために、アクセス許可制御が必要です。ユーザーに特定の権限がない場合、特定のインターフェイスにアクセスできません。この記事では、waynboot-mall プロジェクトを例として、一般的なバックエンド管理システムがアクセス許可制御フレームワーク SpringSecurity を導入する方法を紹介します。 waynboot-mall プロジェクトアドレス: https://github.com/wayn111/waynboot-mall 1. SpringSecurity とは SpringSecurity は、Spring フレームワークをベースとした、強力かつ柔軟なセキュリティの提供を目的としたオープンソース プロジェクトです。 Java アプリケーションの場合。
