SPEISEKARTE

Java-Reflektion leicht gemacht

Inhaltsverzeichnis

Java-Reflektion leicht gemacht

JavavonBetrachtungEinführung einer Dienstprogrammklasse, die Ihnen die einfache Verwendung der API ermöglicht.

Was ist Reflexion?

Reflection-APIZähne,"java.lang.reflect” im Paket enthalten,
Dabei handelt es sich um eine API, die Informationen wie Felder und Methoden aus Java-Klassen abruft.
Die folgenden Klassen werden hauptsächlich verwendet.

  • java.lang.Class
  • java.lang.reflect.Constructor
  • java.lang.reflect.Method
  • java.lang.reflect.Field

BetrachtungMithilfe von können Sie Klassen erstellen oder Methoden aufrufen, ohne diese direkt codieren zu müssen.
Sie können eine Klasseninstanz aus einem String erstellen oder eine Methode ausführen.

Indem Sie die Definitionen von Klassennamen und Methodennamen in externe Dateien wie XML schreiben, können Sie die Anwendung während der Laufzeit dynamisch an Änderungen in der Umgebung anpassen.
Es ist auch eine sehr effektive API zum Erstellen hochflexibler Anwendungen.


Zweck der Reflexion

Betrachtungwird nicht oft direkt von Benutzern verwendet,
Es wird häufig in Webanwendungen wie Struts und Frameworks wie O/R-Mapping verwendet.

Wenn Sie beispielsweise Web-Bildschirmeingabedaten automatisch auf JavaBeans-Eigenschaften festlegen,
Es wird bei der Ausgabe von SQL verwendet, das basierend auf JavaBeans-Eigenschaften automatisch aktualisiert wird.

Darüber hinaus stehen Funktionen wie das dynamische Laden und Registrieren von Plug-Ins zur Verfügung, die die Funktionalität beim Start der Anwendung erweitern.BetrachtungDies lässt sich ganz einfach mit erreichen.

Ausführen der Probe

Bitte führen Sie das Beispiel aus und erleben Sie die Framework-ähnliche Programmierung.

Hier verwenden wir die folgende KlasseBetrachtungDemonstriert eine einfache Verwendung des Dienstprogramms.

Main.java...Klasse, die ausgeführt werden soll
BeanUtil.java...Reflection-Dienstprogrammklasse
FreeSoft.java...Wird als Reflexion in einer Klasse verwendet, die freie Software repräsentiert.

●Bei normaler Ausführung

System.out.println(„>>>Normalfall“);
FreeSoft freeSoft = new FreeSoft();
freeSoft.setName(„Chat&Messenger Chat und Messenger!!“);
freeSoft.showName();
freeSoft.showPrice(0);

●Bei Ausführung mit Reflexion

System.out.println(„>>>Bei Verwendung von Reflexion“);
//Erstelle eine Instanz der FreeSoft-Klasse
Objekt invokeObject = BeanUtil.newInstance(„FreeSoft“);
//Legen Sie den Wert im Namensfeld fest.
BeanUtil.setProperty(invokeObject, "Name" , „Chat&Messenger Chat und Messenger!!“);
// Führe die showName()-Methode von FreeSoft aus.
BeanUtil.invoke(invokeObject, "Name anzeigen", Null);
// Führe die showPrice()-Methode von FreeSoft aus.
// Wenn die Methode Argumente hat, müssen diese als Array vom Typ Object übergeben werden.
BeanUtil.invoke(invokeObject, „showPrice“,new Object[]{new Integer(0)});

●Ausführungsergebnisse

Die Ausführungsergebnisse sind im Normalfall und bei Verwendung von Reflektion gleich.

>>> Normalfall

Name der Software: Chat&Messenger Chat und Messenger! !

Preis: 0 Yen

>>> Bei Verwendung von Reflexion

Name der Software: Chat&Messenger Chat und Messenger! !

Preis: 0 Yen

Details zur BeanUtil-Methode

neueInstanz

öffentliches statisches Objekt neueInstanz(String className) löst eine Ausnahme aus
Erzeugt eine Instanz aus der Zeichenfolge „className“ und gibt sie zurück.

Parameter:
Klassenname – Vollqualifizierter Klassenname
Rückgabewert:
Eine neue Instanz eines vollständig qualifizierten Klassennamens
Ausnahme:
Ausnahme

neueInstanz

öffentliches statisches Objekt neueInstanz(String className, Object[] argObj) löst eine Ausnahme aus
Erzeugt eine Instanz aus der Zeichenfolge „className“ und gibt sie zurück.

Parameter:
Klassenname – Vollqualifizierter Klassenname
argObj – Konstruktorargumente
Rückgabewert:
Eine neue Instanz eines vollständig qualifizierten Klassennamens
Ausnahme:
Ausnahme

neueInstanz

öffentliches statisches Objekt neueInstanz(Klasse clazz) löst eine Ausnahme aus
Erzeugt eine Instanz der Klasse „clazz“ und gibt sie zurück.

Parameter:
Clazz - Klasse
Rückgabewert:
Neue Instanz von Clazz
Ausnahme:
Ausnahme

neueInstanz

öffentliches statisches Objekt neueInstanz(Klasse clazz, Object[] argObj) löst eine Ausnahme aus
Erzeugt eine Instanz der Klasse „clazz“ und gibt sie zurück.

Parameter:
Clazz - Klasse
argObj – Konstruktorargumente
Rückgabewert:
Neue Instanz von Clazz
Ausnahme:
Ausnahme

setProperty

öffentliche statische Leere setProperty(Object invokeObject, String fieldName, Object value) löst eine Ausnahme aus
Rufen Sie die Setter-Methode des Feldes „fieldName“ des Objekts „invokeObject“ auf und speichern Sie den Wert „value“.

Wenn es keine Setter-Methode gibt, wird der Wert direkt auf das Feld gesetzt. In diesem Fall muss der Zugriffsmodifikator der Zieleigenschaft jedoch öffentlich sein.

Parameter:
invokeObject – Auszuführendes Objekt
Feldname – Eigenschaftsname des auszuführenden Objekts
Wert – Wert, der eingestellt werden soll
Ausnahme:
Ausnahme – Die folgende Ausnahme tritt auf.
InvocationTargetException – Wenn die zugrunde liegende Methode eine Ausnahme auslöst
IllegalAccessException – Dieses Methodenobjekt ist Java
Wenn die Sprachzugriffskontrolle implementiert ist und auf die zugrunde liegende Methode nicht zugegriffen werden kann
NoSuchMethodException – Wenn eine Methode mit dem angegebenen Namen nicht gefunden wird

getProperty

öffentliches statisches Objekt getProperty(Objekt invokeObject, String fieldName) löst eine Ausnahme aus
Ruft die Getter-Methode des Felds fieldName des Objekts invokeObject auf, um den Wert abzurufen.
Wenn keine Getter-Methode vorhanden ist, wird der Wert direkt aus dem Feld abgerufen. In diesem Fall muss der Zugriffsmodifikator der Zieleigenschaft jedoch öffentlich sein.

Parameter:
invokeObject – Auszuführendes Objekt
Feldname – Eigenschaftsname des auszuführenden Objekts
Rückgabewert:
Rückgabewert der Getter-Methode
Ausnahme:
Ausnahme – Die folgende Ausnahme tritt auf.
InvocationTargetException – Wenn die zugrunde liegende Methode eine Ausnahme auslöst
IllegalAccessException – Dieses Methodenobjekt ist Java
Wenn die Sprachzugriffskontrolle implementiert ist und auf die zugrunde liegende Methode nicht zugegriffen werden kann
NoSuchFieldException – Wenn ein Feld mit dem angegebenen Namen nicht gefunden wird

aufrufen

öffentliches statisches Objekt aufrufen(Objekt invokeObject, String callMethod, Object[] argObjects) löst InvocationTargetException, IllegalAccessException, NoSuchMethodException aus
Führt die Methode „callMethod“ des Objekts „invokeObject“ aus.
Wenn ein Rückgabewert vorhanden ist, kann dieser als Objekt abgerufen werden.

Parameter:
invokeObject – Auszuführendes Objekt
callMethod – Name der auszuführenden Methode
argObjects – Wenn Argumente vorhanden sind, übergeben Sie diese als Array von Objekten. Wenn keine Argumente vorhanden sind, übergeben Sie null.
Rückgabewert:
Rückgabewert der Ausführung von „callMethod“
Ausnahme:
InvocationTargetException – Wenn die zugrunde liegende Methode eine Ausnahme auslöst
IllegalAccessException – Dieses Methodenobjekt ist Java
Wenn die Sprachzugriffskontrolle implementiert ist und auf die zugrunde liegende Methode nicht zugegriffen werden kann
NoSuchMethodException – Wenn eine Methode mit dem angegebenen Namen nicht gefunden wird

findMethod

öffentliche statische Methode findMethod(Objekt invokeObject, String callMethod, Object[] argObjects) löst eine NoSuchMethodException aus
Suchen Sie nach der Methode „callMethod“ des Objekts „invokeObject“.

Parameter:
invokeObject – Auszuführendes Objekt
callMethod – Methodenname des auszuführenden Objekts
argObjects – Wenn Argumente vorhanden sind, übergeben Sie diese als Array von Objekten. Wenn keine Argumente vorhanden sind, übergeben Sie null.
Rückgabewert:
Ein Methodenobjekt, das den angegebenen Argumentbedingungen entspricht
Ausnahme:
NoSuchMethodException – Wenn keine passende Methode gefunden wird oder der Name „“ oder „“ lautet

setField

öffentliche statische Leere setField(Object invokeObject, String fieldName, Object value) löst IllegalAccessException, NoSuchFieldException aus
Speichert den Wert „value“ im Feldnamen „fieldName“ des auszuführenden Objekts „invokeObject“.

Parameter:
invokeObject – Auszuführendes Objekt
Feldname – Feldname des auszuführenden Objekts
Wert – Wert, der eingestellt werden soll
Ausnahme:
IllegalAccessException – Das Feld, auf dem das angegebene Objekt basiert (oder seine Unterklasse oder sein Implementierer)
keine Instanz der Klasse oder Schnittstelle ist, die sie deklariert, oder wenn die Entpackungskonvertierung fehlschlägt
NoSuchFieldException – Wenn ein Feld mit dem angegebenen Namen nicht gefunden wird

getField

öffentliches statisches Objekt getField(Objekt invokeObject, String fieldName) löst IllegalAccessException, NoSuchFieldException aus
Ruft den Wert des Feldnamens „fieldName“ des auszuführenden Objekts „invokeObject“ ab.

Parameter:
invokeObject – Auszuführendes Objekt
Feldname – Feldname des auszuführenden Objekts
Rückgabewert:
Rückgabewert
Ausnahme:
IllegalAccessException – Das Feld, auf dem das angegebene Objekt basiert (oder seine Unterklasse oder sein Implementierer)
keine Instanz der Klasse oder Schnittstelle ist, die sie deklariert, oder wenn die Entpackungskonvertierung fehlschlägt
NoSuchFieldException – Wenn ein Feld mit dem angegebenen Namen nicht gefunden wird

hasField

öffentlicher statischer boolescher Wert hasField(Objektobjekt, String Feldname) löst eine Ausnahme aus
Prüft, ob das Objekt „object“ den Feldnamen „fieldName“ deklariert.

Parameter:
Objekt – Zu prüfendes Objekt
Feldname – Zu überprüfender Feldname
Rückgabewert:
wahr, wenn deklariert
Ausnahme:
Ausnahme

getAllFields

öffentliches statisches java.util.TreeSet getAllFields(Objektobjekt) löst eine Ausnahme aus
Parameter:
Objekt
Rückgabewert:
Ausnahme:
Ausnahme

getShortClassName

öffentlicher statischer String getShortClassName(Objektobjekt)
Ruft den unqualifizierten Klassennamen von einem Objekt ab.

Parameter:
Objekt
Rückgabewert:

getShortClassName

öffentlicher statischer String getShortClassName(String-Klassenname)
Ruft den Klassennamen aus dem vollständig qualifizierten Namen ab.

Parameter:
Klassenname
Rückgabewert:

getFieldName

öffentlicher statischer String getFieldName(String methodName)
Ändern Sie den Feldnamen vom Methodennamen. Muss den JavaBeans-Konventionen entsprechen.

Parameter:
Methodenname
Rückgabewert:

isClassExist

öffentlicher statischer boolescher Wert isClassExist(String-Klassenname)
Überprüft, ob der vollständig qualifizierte Name „className“ ein vorhandener Klassenname ist.

Parameter:
Klassenname
Rückgabewert:

getPropertyDescriptors

öffentlicher statischer PropertyDescriptor[] getPropertyDescriptors(Objektobjekt) löst eine IntrospectionException aus
Gibt einen PropertyDescriptor zurück, der Objektinformationen für „object“ enthält.

Parameter:
Objekt
Rückgabewert:
Ausnahme:
java.beans.IntrospectionException

BeanUtil-Quellcode

  • URLをコピーしました!
Inhaltsverzeichnis