Parler de peut-être que ce n'est qu'une introduction - proxy dynamique Java


Préface

La réflexion, c'est comme une sorte de magie. L'introduction de fonctionnalités d'introspection à l'exécution donne au langage Java une vitalité inattendue. En manipulant des métadonnées ou des objets à l'exécution, Java peut manipuler de manière flexible des informations qui ne peuvent être déterminées qu'à l'exécution. L'agent dynamique est une technologie étendue largement utilisée dans le développement de produits. De nombreuses programmations fastidieuses et répétitives peuvent être résolues avec élégance par le mécanisme d'agent dynamique.


Modèle d'agent de pré-connaissance

Le scénario simule l'utilisateur passant une commande et appelant le fournisseur pour ajouter le journal de l'agent

1 Demo.java 
2 ProxySubOrder.java 代理日之类 
3 RealSubOrder.java 实现类
4 SubOrder.java 接口 

Démo.java

/**
 * @ClassName Demo
 * @Author xiaojinlu
 * @Date 2020/11/5 17:03
 * @Version 1.0
 */


public class Demo {
    public static void main(String[] args) {
        SubOrder subOrder  = new ProxySubOrder();
        subOrder.getSupplier();
    }
}

ProxySubOrder.java

import org.springframework.beans.factory.annotation.Autowired;

/**
 * 主要添加供应商调用前后日志
 * 代理下单在调用供应商的时候组做些事情
 * @ClassName ProxySubOrder
 * @Author xiaojinlu
 * @Date 2020/11/5 17:07
 * @Version 1.0
 */


public class ProxySubOrder implements SubOrder{

    @Autowired
    private ProxySubOrder proxySubOrder;

    @Override
    public void getSupplier() {
        System.out.println("start invoke supplier");
        //or SubOrder subOrder = new ProxySubOrder(); local Test implement this
        proxySubOrder.getSupplier();
        System.out.println("end invoke supplier");

    }
}

RealSubOrder.java

/**
 * @ClassName RealSubOrder
 * @Author xiaojinlu
 * @Date 2020/11/5 17:06
 * @Version 1.0
 */


public class RealSubOrder implements SubOrder {
    @Override
    public void getSupplier() {
        System.out.println("do Something");
    }
}

SubOrder.java

/** 接口
 * @ClassName SubOrder
 * @Author xiaojinlu
 * @Date 2020/11/5 17:04
 * @Version 1.0
 */


public interface SubOrder {

   void getSupplier();
}

1. Définition

Améliorez la fonction d'origine sans affecter le code d'origine. La réflexion, c'est comme une sorte de magie. L'introduction de fonctionnalités d'introspection à l'exécution donne au langage Java une vitalité inattendue. En manipulant des métadonnées ou des objets à l'exécution, Java peut manipuler de manière flexible des informations qui ne peuvent être déterminées qu'à l'exécution. L'agent dynamique est une technologie étendue largement utilisée dans le développement de produits. De nombreuses programmations fastidieuses et répétitives peuvent être résolues avec élégance par le mécanisme d'agent dynamique.

Deux scénarios d'application

	1.日志
	2.用户鉴权
	3.全局性异常处理
	4.性能监控
	5.事务处理
	等

AOP permet aux développeurs d'échapper à ces questions fastidieuses grâce à un mécanisme de proxy (dynamique), améliorant considérablement l'abstraction et la réutilisation du code. Logiquement parlant, nos agents similaires dans la conception et la mise en œuvre de logiciels, tels que Facade, Observer et de nombreux autres objectifs de conception, peuvent être réalisés avec élégance grâce à des agents dynamiques.

Troisièmement, la classification des agents

---- Proxy statique: écrivez la classe proxy à l'avance, vous pouvez l'écrire manuellement ou la générer avec des outils. L'inconvénient est que chaque classe affaires doit correspondre à une classe proxy, ce qui est très rigide.

---- Proxy dynamique: génère automatiquement des objets proxy lors de l'exécution. L'inconvénient est qu'il faut plus de temps pour générer des objets proxy et appeler des méthodes proxy.

---- Proxy dynamique JDK: basé sur l'implémentation du mécanisme de réflexion Java, vous devez comprendre le type d'entreprise de l'interface afin de générer des objets proxy de cette manière. La nouvelle version a également commencé à intégrer le mécanisme ASM.

---- proxy dynamique cglib: Sur la base du mécanisme ASM, des sous-classes de classes métier sont générées en tant que classes proxy.

Quatre, expansion

Mécanisme de réflexion

① Présentez

Le mécanisme de réflexion de Java est rarement utilisé dans le processus de développement commercial habituel, mais il est largement utilisé dans la construction de certains cadres de base

②Quel est le mécanisme de réflexion Java

Le mécanisme de réflexion Java est en cours d'exécution, pour n'importe quelle classe, vous pouvez connaître toutes les propriétés et méthodes de cette classe; pour n'importe quel objet, vous pouvez appeler l'une de ses méthodes et propriétés; cette acquisition dynamique d'informations et l'appel dynamique des méthodes d'objet La fonction est appelée le mécanisme de réflexion du langage Java.

③ Quelles sont les fonctions du mécanisme de réflexion?

---- Déterminez la classe à laquelle appartient tout objet au moment de l'exécution

---- Construire un objet de n'importe quelle classe au moment de l'exécution

---- Déterminez les variables membres et les méthodes de n'importe quelle classe au moment de l'exécution

---- Appelez la méthode de n'importe quel objet au moment de l'exécution

---- Générer un proxy dynamique

④ Scénarios d'application du mécanisme de réflexion

---- Proxy dynamique (AOP, RPC)

---- Fournir des capacités d'extension pour les développeurs tiers (conteneur de servlet, connexion JDBC)

---- Objet de création de composant tiers (OI)

---- Code inverse, tel que la décompilation

---- Cadre combiné avec des annotations, telles que Retrofit

---- Un cadre d'application de mécanisme de réflexion pure, tel qu'EventBus 2.x

---- Framework de classe généré dynamiquement tel que Gson

⑤ Avantages et inconvénients du mécanisme de réflexion:

---- Avantages: jugement du type d'exécution, chargement de classe dynamique, proxy dynamique utilisant la réflexion

---- Inconvénients: les performances sont un problème, la réflexion équivaut à une série d'opérations d'interprétation, indiquant à jvm de faire les choses, les performances sont beaucoup plus lentes que le code java direct.

Avantages de JDK Proxy:

Minimiser les dépendances et réduire les dépendances signifie simplifier le développement et la maintenance. Le support de JDK lui-même peut être plus fiable que cglib.

Mettez à niveau en douceur la version JDK, et la bibliothèque de bytecode doit généralement être mise à jour pour s'assurer qu'elle peut être utilisée sur la nouvelle version de Java.

Le code est simple à implémenter.

Basé sur les avantages d'un framework cglib similaire:

Parfois, la cible appelante peut être gênante pour implémenter des interfaces supplémentaires. D'un certain point de vue, restreindre l'appelant à implémenter l'interface est une pratique quelque peu intrusive. Semblable au proxy dynamique cglib, il n'y a pas de telle restriction.

N'exploitez que les classes qui nous intéressent, sans avoir à augmenter la charge de travail des autres classes associées.

haute performance.

Pour résumer

1 Redondance de code réduite.
2 Réalisez la capacité du traitement unifié.

Je suppose que tu aimes

Origine blog.csdn.net/aa327056812/article/details/109511621
conseillé
Classement