Maison >Java >javaDidacticiel >Interprétation de la technologie sous-jacente Java : comment implémenter la réflexion et le proxy dynamique

Interprétation de la technologie sous-jacente Java : comment implémenter la réflexion et le proxy dynamique

PHPz
PHPzoriginal
2023-11-08 17:12:291423parcourir

Interprétation de la technologie sous-jacente Java : comment implémenter la réflexion et le proxy dynamique

Interprétation de la technologie sous-jacente Java : Comment implémenter la réflexion et le proxy dynamique

Introduction :
Java est un langage de programmation orienté objet Au cours du processus de développement, nous devons souvent utiliser certaines technologies sous-jacentes, telles que la réflexion et la dynamique. procuration. Cet article présentera les principes de réflexion et de proxy dynamique et donnera des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et utiliser ces deux technologies sous-jacentes.

1. Le principe de Reflection
Reflection est une fonctionnalité puissante et flexible de Java, qui nous permet d'obtenir et d'exploiter dynamiquement les méthodes, propriétés, constructeurs, etc. Le principe de réflexion fait intervenir principalement trois classes : Classe, Domaine et Méthode.

  1. Class class
    Class La classe est le cœur de la réflexion Java, elle représente une classe ou une interface Java. Nous pouvons obtenir toutes les informations d'une classe via une instance de la classe Class.

Par exemple, en supposant que nous ayons une classe nommée "Person", nous pouvons obtenir l'objet Class de cette classe en utilisant la méthode suivante :

Class<Person> personClass = Person.class;
  1. Classe Field
    La classe Field représente les attributs d'une classe. Nous pouvons obtenir et définir la valeur de propriété d'un objet via une instance de la classe Field.

Par exemple, supposons que nous ayons une classe appelée "Person" qui possède une propriété appelée "name", nous pouvons obtenir et définir la valeur de cette propriété en utilisant :

Person person = new Person();
Field nameField = personClass.getDeclaredField("name");

// 设置name属性值
nameField.setAccessible(true); // 取消访问限制
nameField.set(person, "John");

// 获取name属性值
String name = (String) nameField.get(person);
  1. Method class
    Method Class représente les méthodes d'un classe. Nous pouvons appeler la méthode d’un objet via une instance de la classe Method.

Par exemple, supposons que nous ayons une classe nommée "Person", qui a une méthode nommée "sayHello". Nous pouvons appeler la méthode de la manière suivante :

Person person = new Person();
Method sayHelloMethod = personClass.getDeclaredMethod("sayHello");

// 调用sayHello方法
sayHelloMethod.invoke(person);

2. Principe du proxy dynamique
Le proxy dynamique est une autre fonctionnalité puissante. en Java, ce qui nous permet de créer une classe proxy qui implémente une interface spécifiée au moment de l'exécution. Le proxy dynamique implique principalement deux classes : Proxy et InvocationHandler.

  1. Classe Proxy
    La classe Proxy est la clé pour implémenter un proxy dynamique en Java. Elle crée un objet proxy en appelant la méthode statique Proxy.newProxyInstance().

Par exemple, en supposant que nous ayons une interface nommée "IHello", nous pouvons créer un objet proxy qui implémente cette interface en utilisant :

IHello helloProxy = (IHello) Proxy.newProxyInstance(
    IHello.class.getClassLoader(),
    new Class<?>[]{IHello.class},
    new HelloInvocationHandler()
);
  1. Classe InvocationHandler
    L'interface InvocationHandler est la classe de traitement réelle du proxy dynamique, c'est une méthode invoquée () est défini pour appeler des méthodes sur l'objet proxy.

Par exemple, en supposant que nous avons une interface nommée "IHello" et que cette interface a une méthode nommée "sayHello", nous pouvons implémenter la classe InvocationHandler en utilisant :

public class HelloInvocationHandler implements InvocationHandler {
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if (method.getName().equals("sayHello")) {
            System.out.println("Hello, World!");
        }
        return null;
    }
}

Appelez la méthode "sayHello" en utilisant un proxy dynamique, l'invocation () de la classe HelloInvocationHandler sera appelée pour implémenter le comportement personnalisé de l'objet proxy.

Résumé :
Cet article présente les principes de réflexion et de proxy dynamique dans la technologie sous-jacente de Java et donne des exemples de code spécifiques. Grâce à la réflexion, nous pouvons obtenir et exploiter les méthodes, propriétés, constructeurs, etc. d'une classe au moment de l'exécution ; via un proxy dynamique, nous pouvons créer un objet proxy qui implémente l'interface spécifiée au moment de l'exécution. Ces deux technologies sous-jacentes offrent une plus grande flexibilité et évolutivité pour le développement Java, et les lecteurs peuvent les utiliser de manière flexible en fonction de leurs besoins réels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn