検索
ホームページJava&#&チュートリアルcglib および jdk ダイナミック プロキシの詳細な説明

この記事では、参考価値の高い Spring cglib と jdk ダイナミック プロキシの関連知識を主に紹介します。以下のエディターで見てみましょう

1. 概要

JDK 動的プロキシは、Java リフレクション機構を使用してインターフェースを実装する匿名クラスを生成し、特定のメソッドを呼び出す前に InvocationHandler を呼び出してそれを処理します

Cglib動的プロキシの使用 asm オープン ソース パッケージは、プロキシ クラスのクラス ファイルをロードし、そのバイトコードを変更して処理してサブクラスを生成します。ターゲット オブジェクトがインターフェイスを実装している場合は、デフォルトで jdk プロキシが使用されます (cglib プロキシを強制することができます)。インターフェイスが実装されていない場合は、cglib プロキシを使用する必要があります

cglib プロキシの使用を強制するには

*cglibjar パッケージの紹介

* spring

cglib はプロキシ クラスのサブクラスを動的に生成し、それを実現するためにプロキシ クラスのメソッドをオーバーライドするため、プロキシ メソッドは

final

2 で変更されるべきではありません。

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
Proxiedクラス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.
//增强后...jdk
Proxiedインターフェースと実装クラス
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.

JAVA チュートリアルマニュアル

3. Java アノテーションの包括的な解析

以上がcglib および jdk ダイナミック プロキシの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

DVWA

DVWA

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

Safe Exam Browser

Safe Exam Browser

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