Maison Java javaDidacticiel Une brève introduction à la réflexion de base JavaRéflexion

Une brève introduction à la réflexion de base JavaRéflexion

Apr 03, 2019 pm 06:40 PM
java


La réflexion est l'une des fonctionnalités du langage de développement de programmes Java. Elle permet à un programme Java en cours d'exécution d'obtenir ses propres informations et d'accéder aux propriétés de l'objet Java au moment de l'exécution. , méthodes, constructeurs, etc.

Une brève introduction à la réflexion de base JavaRéflexion

Scénarios d'application

Développement de cadres universels - L'utilisation la plus importante de la réflexion est de développer divers cadres universels. Par exemple, Spring configure les JavaBeans, les filtres, etc. via des fichiers XML. Afin de garantir la polyvalence du framework, ils peuvent avoir besoin de charger différents objets ou classes et d'appeler différentes méthodes en fonction du fichier de configuration. être utilisé - le chargement dynamique au moment de l'exécution est requis. Proxy dynamique - En programmation d'aspect (AOP), il est nécessaire d'intercepter des méthodes spécifiques. Habituellement, la méthode du proxy dynamique est choisie. Annotation - L'annotation elle-même sert uniquement de marque. Elle doit utiliser le mécanisme de réflexion pour appeler l'interpréteur d'annotation en fonction de la marque d'annotation et exécuter le comportement. Sans réflexion, les annotations ne sont pas plus utiles que les annotations. Fonctionnalités d'extensibilité : les applications peuvent utiliser des classes externes définies par l'utilisateur en créant des instances d'objet d'extensibilité à l'aide de leurs noms complets. Inconvénients

Surcharge de performances - Les opérations réfléchissantes fonctionnent moins bien que les opérations non réfléchissantes et doivent être évitées dans les segments de code fréquemment appelés dans les applications sensibles aux performances. Rompre l'encapsulation : les contrôles d'autorisation peuvent être ignorés lors de l'appel de méthodes par réflexion, ce qui peut potentiellement rompre l'encapsulation et provoquer des problèmes de sécurité. Exposition interne : étant donné que la réflexion permet au code d'effectuer des opérations illégales dans du code non réfléchi, telles que l'accès à des champs et des méthodes privés, l'utilisation de la réflexion peut provoquer des effets secondaires involontaires, pouvant entraîner un dysfonctionnement du code et potentiellement interrompre la portabilité. Le code réfléchissant brise les abstractions et peut donc modifier le comportement à mesure que la plateforme est mise à niveau. Objet Classe

Pour utiliser la réflexion, il faut d'abord obtenir l'objet Classe correspondant à la classe sur laquelle opérer.

L'essence de la réflexion : au moment de l'exécution, divers attributs de chaque classe Java sont mappés en objets Java individuels.

Si le code suivant est défini :

User user = new User();

1 Lorsque la JVM charge la méthode et rencontre new User(), la JVM. le nom complet de l'utilisateur pour charger User.class ;

2. La JVM recherchera le fichier User.class sur le disque local et le chargera dans la mémoire JVM.

3. La JVM crée automatiquement l'objet Class correspondant à cette classe en appelant le chargeur de classe, et le stocke dans la zone méthode de la JVM.

Trois façons d'obtenir Class :

(1) Utiliser la méthode statique forName de la classe Class

Scénarios d'application

Développer un cadre général - réflexion est le plus important. L’objectif est de développer divers cadres généraux. Par exemple, Spring configure les JavaBeans, les filtres, etc. via des fichiers XML. Afin de garantir la polyvalence du framework, ils peuvent avoir besoin de charger différents objets ou classes et d'appeler différentes méthodes en fonction du fichier de configuration. être utilisé - le chargement dynamique au moment de l'exécution est requis. Proxy dynamique - En programmation d'aspect (AOP), il est nécessaire d'intercepter des méthodes spécifiques. Habituellement, la méthode du proxy dynamique est choisie. Annotation - L'annotation elle-même sert uniquement de marque. Elle doit utiliser le mécanisme de réflexion pour appeler l'interpréteur d'annotation en fonction de la marque d'annotation et exécuter le comportement. Sans réflexion, les annotations ne sont pas plus utiles que les annotations. Fonctionnalités d'extensibilité : les applications peuvent utiliser des classes externes définies par l'utilisateur en créant des instances d'objet d'extensibilité à l'aide de leurs noms complets. Inconvénients

Surcharge de performances - Les opérations réfléchissantes fonctionnent moins bien que les opérations non réfléchissantes et doivent être évitées dans les segments de code fréquemment appelés dans les applications sensibles aux performances. Rompre l'encapsulation : les contrôles d'autorisation peuvent être ignorés lors de l'appel de méthodes par réflexion, ce qui peut potentiellement rompre l'encapsulation et provoquer des problèmes de sécurité. Exposition interne : étant donné que la réflexion permet au code d'effectuer des opérations illégales dans du code non réfléchi, telles que l'accès à des champs et des méthodes privés, l'utilisation de la réflexion peut provoquer des effets secondaires involontaires, pouvant entraîner un dysfonctionnement du code et potentiellement interrompre la portabilité. Le code réfléchissant brise les abstractions et peut donc modifier le comportement à mesure que la plateforme est mise à niveau. Objet Classe

Pour utiliser la réflexion, il faut d'abord obtenir l'objet Classe correspondant à la classe sur laquelle opérer.

L'essence de la réflexion : au moment de l'exécution, divers attributs de chaque classe Java sont mappés en objets Java.

Si le code suivant est défini :

User user = new User();

1 Lorsque la JVM charge la méthode et rencontre new User(), la JVM. le nom complet de l'utilisateur pour charger User.class ;

2. La JVM recherchera le fichier User.class sur le disque local et le chargera dans la mémoire JVM.

3. La JVM crée automatiquement l'objet Class correspondant à cette classe en appelant le chargeur de classe, et le stocke dans la zone méthode de la JVM.

Trois façons d'obtenir Class :

(1) Utilisez la méthode statique forName de la classe Class

Une brève introduction à la réflexion de base JavaRéflexion

(2) Appelez la méthode getClass de l'objet

Une brève introduction à la réflexion de base JavaRéflexion

Reflection crée un objet instance

Utilisez la newInstance de la méthode objet Class. Utilisez la méthode newInstance de l'objet Constructor

Une brève introduction à la réflexion de base JavaRéflexion

Les interfaces et classes principales du package java.lang.reflect

Interface membre - réfléchissez à un seul membre (champ ou méthode) Ou les informations d'identification du constructeur. Classe Field - Fournit des informations sur les champs d'une classe et une interface pour accéder aux champs d'une classe. Classe de méthodes - Fournit des informations sur les méthodes d'une classe et une interface pour accéder aux méthodes de la classe. Classe Constructeur - Fournit des informations sur le constructeur d'une classe et une interface pour accéder au constructeur de la classe. Classe Array - Cette classe fournit des méthodes pour générer et accéder dynamiquement aux tableaux JAVA. Classe de modificateur - Fournit des méthodes statiques et des constantes pour décoder les modificateurs d'accès aux classes et aux membres. Classe proxy : fournit des méthodes statiques pour générer dynamiquement des classes proxy et des instances de classe.

[Cours recommandés : Cours liés à Java]

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

Guide du numéro Armstrong en Java. Nous discutons ici d'une introduction au numéro d'Armstrong en Java ainsi que d'une partie du code.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

See all articles